gpt4 book ai didi

ruby-on-rails - 使用 vagrant 调试运行 docker 的 Rails 应用程序

转载 作者:行者123 更新时间:2023-12-02 03:34:49 24 4
gpt4 key购买 nike

我正在尝试找出运行 Rails 应用程序的 vagrant 和 docker 的最佳开发工作流程。在我的 dockerfile 中我有这个:

FROM quirky/rails:latest

RUN mkdir /opt/app
WORKDIR /opt/app

# Install gems
ADD ./Gemfile /opt/app/Gemfile
ADD ./Gemfile.lock /opt/app/Gemfile.lock
RUN bundle install

# Instal npm packages
ADD ./package.json /opt/app/package.json
RUN npm install

# Expose directories and ports
VOLUME /opt/app
EXPOSE 3000

# Run the web server
WORKDIR /opt/app
CMD rm -f /opt/app/tmp/pids/server.pid && bundle exec rails s

我的 Vagrantfile 看起来像这样:

 config.vm.define "app" do |app|
app.vm.provider "docker" do |d|
d.build_dir = "."
d.link "db:db"
d.link "redis:redis"
d.link "solr:solr"
d.volumes = ["/app:/opt/app"]
d.ports = ["3000:3000"]
d.vagrant_vagrantfile = "./docker/Vagrantfile"
d.remains_running = true
end
end

config.vm.define "db" do |db|
db.vm.provider "docker" do |d|
d.image = "paintedfox/postgresql"
d.name = "db"
d.env = {USER: "vagrant", PASS: "password"}
d.vagrant_vagrantfile = "./docker/Vagrantfile"
end
end

config.vm.define "redis" do |redis|
redis.vm.provider "docker" do |d|
d.image = "dockerfile/redis"
d.name = "redis"
d.ports = ["6379:6379"]
d.vagrant_vagrantfile = "./docker/Vagrantfile"
end
end

config.vm.define "solr" do |solr|
solr.vm.provider "docker" do |d|
d.image = "quirky/solr"
d.name = "solr"
d.ports = ["8080:8080"]
d.vagrant_vagrantfile = "./docker/Vagrantfile"
end
end

通常,如果我想调试某些东西,我只需在代码中添加一个 debugger 语句,然后将其作为本地进程运行,它会遇到断点并启动 pry 或任何调试器控制台是。这在 vagrant 的容器内如何工作?

这就是我开始开发环境的方式:

vagrant up app --provider=docker

它在后台启动它。似乎没有办法启动它并附加到它。我是否缺少可以传递给 vagrant 的命令或标志?

最佳答案

您正在寻找 docker execnsenter [ 1 ].使用这些工具之一,您可以在不使用 SSH 的情况下登录容器并检查您的日志。

如果你想调试 vagrant 创建和运行 docker-container 你可以像这样附加 --debug 标志:

vagrant up app --provider=docker --debug

但这不会直接从您的 Vagrantfile 中为您提供任何调试信息。如果您仍想从 vagrantfile 中获取调试消息,我建议您阅读有关 vagrants UI 类的信息。

PS:也许您只是想要像这样的 puts 语句:puts "I'm here!"?

PPS:如果您想坚持使用 vagrant 和 SSH,has_ssh 值和容器中的 SSH 服务器是可行的方法。

nsenter/docker exec

关于ruby-on-rails - 使用 vagrant 调试运行 docker 的 Rails 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24276076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com