当前位置: 首页 > 知识库问答 >
问题:

使用IntelliJ/RubyMine在docker中调试rails应用程序

简景焕
2023-03-14

这里是Dockerfile

FROM ruby:2.2.0
# Install package
RUN apt-get update -qq && apt-get install -y \
    build-essential \
    libpq-dev \
    nodejs \
    openssh-server

# Setting sshd
RUN mkdir /var/run/sshd
RUN echo 'root:root' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

和docker-compose.yml

version: '2'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
      - "22"
    depends_on:
      - db

(对于ssh->在flow this链接https://docs.docker.com/engine/examples/running_ssh_service/)

3000/TCP->0.0.0.0:3000

将ssh连接到容器

ssh root@localhost-p 32768

RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp
 volumes:
      - .:/myapp

通过删除docker-compose.yml中的这一行,我可以很好地将SSH连接到容器

command: bundle exec rails s -p 3000 -b '0.0.0.0'

所以我认为问题是关于Rails的。但我不知道怎么修。

共有1个答案

茅慈
2023-03-14

我已经设法使用RubyMine远程调试docker中运行的rails,而不使用SSH。

  • RubyMine 2017.2.4(建筑#RM-172.4155.44,2017年9月26日建筑)
  • docker内部ruby(ruby 2.4.2p198(2017-09-14修订版59899)[x86_64-linux])
  • RubyMine使用的Ruby SDK和宝石(Ruby-2.4.2-P198)

注意:对于Ruby SDK,我只是使用本地的Ruby解释器/usr/bin/Ruby,而不是远程的。

docker run --name rails-demo -p 1234:1234 -p 3080:3000 -it ruby bash
# gem 'pry-byebug'
gem 'debase', '0.2.2.beta10'
gem 'ruby-debug-ide'
bundle install
/home/hello_rails# rdebug-ide --host 0.0.0.0 --port 1234 --dispatcher-port 26162 -- bin/rails s

现在启动RubyMine,运行->Debug...->编辑配置...

单击加号'+'添加新配置,并选择Ruby remote Debug。

如上图所示填写表单,然后单击Debug按钮。现在您将在docker中看到Rails服务器开始运行:

/home/hello_rails# rdebug-ide --host 0.0.0.0 --port 1234 --dispatcher-port 26162 -- bin/rails s
Fast Debugger (ruby-debug-ide 0.6.0, debase 0.2.2.beta10, file filtering is supported) listens on 0.0.0.0:1234
=> Booting Puma
=> Rails 5.1.4 application starting in development 
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.10.0 (ruby 2.4.2-p198), codename: Russell's Teapot
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
 类似资料:
  • 问题内容: 我有一个Rails应用程序在开发环境中的docker容器中运行。 当我尝试通过在代码中放置某个地方并将其附加到容器上来对其进行调试时,我可以在输出中看到提示,但提示不会暂停,并且无法像没有docker容器一样与之交互。 那么如何调试容器化应用程序? 问题答案: 如果您使用的是docker-compose,则可以将这些标志添加到: 然后使用附加到您的过程。现在在这里工作。确保在您的容器上

  • 我真的希望有人能帮忙,因为这快把我逼疯了。 我试着在Ubuntu上调试运行RubyMine,但是一点运气都没有。我花了几个小时在谷歌上搜索和阅读文章,尝试不同的东西,但毫无乐趣。 当我在调试模式下运行时,发生的所有情况是出现以下消息: 然后我得到一个加载栏,显示等待10秒钟调试。然后我得到: 我不知道该尝试什么,我一直在努力寻找一篇关于如何从头开始配置的像样文章,我只是从RubyMine那里得到了

  • 问题内容: 我有一个在码头上运行的Jetty应用程序。我想使用本地IntelliJ调试此应用程序。我使用的是14.1版,因此我已经安装了Docker Integration插件。 在“云”下,我使用的是单击“ +”时显示的默认值。IntelliJ文档说这应该没问题。在这里 我不确定它们的用途,所以我不知道这些值是否正确。 在运行/调试配置下,我正在使用Docker部署,以及以下值: 当我尝试运行此

  • 我为Rails配置Devise gem,在代码中看起来不错,但当我尝试注册新用户时,我遇到了问题。在注册表单中设计显示通知: 请查看以下问题: 但仅此而已。没什么特别的消息。我应该先找哪里?这样的东西怎么调试?有什么建议吗? 从rails服务器登录: 已于2014-09-14 17:09:13 0200开始对127.0.0.1进行POST“/auth/register”处理,由device::re

  • 我想调试一个Vaadin8应用程序,当我启动Gradle-Task“Vaadinrun”时,控制台会告诉我调试端口: 运行在http://localhost:8080上的应用程序(调试器在8000上) 有效的方法是将远程调试会话附加到端口8000,但奇怪的是,一定有更简单的方法。问题是怎么做? 智能点子:2017.2.5 分级:4.2.1 Gradle-Vaadin支持:com.devsoap.p

  • 我想在intellij Idea中以调试模式启动spring-boot maven应用程序,但当我创建断点时,应用程序不会挂起,而是会继续。我读了很多题目,但还是不明白怎么做。你能帮我决定最好的行动方案吗。 但是当请求LocalHost:5005/MyPage时,我会出现错误101(NET::ERR_CONNECTION_RESET)。似乎有些maven参数没有指定。 下面是我在pom.xml中的