【问题标题】:docker-compose run command cannot find gem after running bundle installdocker-compose run 命令在运行 bundle install 后找不到 gem
【发布时间】:2019-04-23 17:29:31
【问题描述】:

我正在为我的 Rails 应用程序使用 docker-compose。

我最近对我的 master 分支进行了更新,将 rails 版本更新到了 5.2.3 —— 我通过 docker-compose 运行了 bundle install:

docker-compose run web bundle install

看起来它运行良好,但是当我尝试运行 rspec 时出现此错误:

Could not find activesupport-5.2.3 in any of the sources
Run `bundle install` to install missing gems.

我尝试运行bundle update activesupport - 得到这个:

Bundler attempted to update activesupport but its version stayed the same
Bundle updated!

所以我尝试手动安装 gem:

docker-compose run web gem install activesupport
Fetching activesupport-5.2.3.gem
Successfully installed activesupport-5.2.3
1 gem installed

然后我尝试再次运行 rspec,同样的事情:

$ docker-compose run web bin/rspec ./spec/some_spec.rb 
Could not find activesupport-5.2.3 in any of the sources
Run `bundle install` to install missing gems.

docker-compose 是否没有注意到 gem/bundle 的变化?我在这里遗漏了什么吗?

【问题讨论】:

  • 您可以将您的Dockerfile 和您的docker-compose.yml 添加到问题中吗?当你说“run rspec”时,你到底在运行哪个命令?
  • 你可以在我上面的描述中看到我通过docker-compose run web bin/rspec ./spec/some_spec.rb 运行它

标签: ruby-on-rails docker rspec docker-compose bundler


【解决方案1】:

docker-compose run 每次调用时都会创建一个新容器,您的更改不会保留。

如果您希望您的更改保持不变,请使用 docker-compose exec,它会在正在运行的容器中运行您的命令。

【讨论】:

    【解决方案2】:

    每个docker-compose run 都在启动一个新容器。 运行两次,然后运行docker ps -a,你会看到两个Exited容器。

    您需要在您的Dockerfile 中运行您的bundle install 作为映像构建过程的一部分。

    作为附注提示,通常的做法是首先仅复制 GemfileGemfile.lock 文件,运行 bundle install,然后才复制整个应用程序。这样,您可以创建两个单独的层,并避免在应用程序文件更改时重新安装所有 gem。

    这是一个Dockerfile 供参考。

    FROM ruby:2.5.3
    
    WORKDIR $RAILS_ROOT
    
    # ... more custom stuff here ...
    
    # Pre-install gems
    COPY Gemfile* ./
    RUN gem install bundler && bundle install --jobs=3 --retry=3 
    
    # Copy app files
    COPY . .
    RUN chmod -R 755 $RAILS_ROOT/bin
    
    # Run server
    EXPOSE 3000
    CMD bundle exec rails s -b 0.0.0.0 -p 3000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      相关资源
      最近更新 更多