首页 > 解决方案 > Rails 资产:预编译使用了错误的捆绑器版本

问题描述

我最近更新了我的 dockerized rails 应用程序(5.0 -> 5.2),现在正在使用 Bundler 2。

我已添加RUN gem install bundler到我Dockerfile以确保我安装了 Bundler 2。我的RUN bundle install步骤运行良好,但是当我进入资产预编译步骤时,它似乎又开始使用 Bundler 1:

Step 12/17 : RUN rails assets:precompile --trace
 ---> Running in facccf7d562c
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/lockfile_parser.rb:108:in `warn_for_outdated_bundler_version': You must use Bundler 2 or greater with this lockfile. (Bundler::LockfileError)

1. 为什么资产预编译甚至使用bundler?

2.我如何强制它给用户Bundler 2?

这是失败的 Dockerfile 片段(在最后一步):

RUN gem install bundler

RUN bundle install
RUN yarn install
RUN rails assets:precompile --trace

标签: ruby-on-railsrubydockerdockerfilebundler

解决方案


您可能需要强制 Bundler 管理依赖项:

bundle exec rails assets:precompile

这可以确保 Gem 环境按照Gemfile.

Rails 通常会尝试让这个为你工作,但有时它不能让事情完全同步并且你看到的行为会表现出来。


推荐阅读