在Phusion Passenger Docker镜像上出现错误“在任何源中找不到rake-10.5.0”
我正在尝试使用Docker和Phusion Passenger Ruby基本映像来部署Rails应用程序,但每当我尝试从浏览器访问应用程序时,都会遇到以下错误:
web_1 | [ 2016-02-08 04:18:44.6861 31/7ff292141700 age/Cor/App/Implementation.cpp:304 ]: Could not spawn process for application /home/app/webapp: An error occurred while starting up the preloader. web_1 | Error ID: d3103e16 web_1 | Error details saved to: /tmp/passenger-error-EwymlW.html web_1 | Message from application: <p>It looks like Bundler could not find a gem. Maybe you didn't install all the gems that this application needs. To install your gems, please run:</p> web_1 | web_1 | <pre class="commands">bundle install</pre> web_1 | web_1 | <p>If that didn't work, then the problem is probably caused by your application being run under a different environment than it's supposed to. Please check the following:</p> web_1 | web_1 | <ol> web_1 | <li>Is this app supposed to be run as the <code>app</code> user?</li> web_1 | <li>Is this app being run on the correct Ruby interpreter? Below you will web_1 | see which Ruby interpreter Phusion Passenger attempted to use.</li> web_1 | </ol> web_1 | web_1 | <p>-------- The exception is as follows: -------</p> web_1 | Could not find rake-10.5.0 in any of the sources (Bundler::GemNotFound) web_1 | <pre> /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/spec_set.rb:92:in `block in materialize' web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/spec_set.rb:85:in `map!' web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/spec_set.rb:85:in `materialize' web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/definition.rb:140:in `specs' web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/definition.rb:185:in `specs_for' web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/definition.rb:174:in `requested_specs' web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/environment.rb:18:in `requested_specs' web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/runtime.rb:13:in `setup' web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler.rb:127:in `setup' web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/setup.rb:18:in `<top (required)>' web_1 | /usr/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require' web_1 | /usr/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require' web_1 | /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:430:in `activate_gem' web_1 | /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:297:in `block in run_load_path_setup_code' web_1 | /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:435:in `running_bundler' web_1 | /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:296:in `run_load_path_setup_code' web_1 | /usr/share/passenger/helper-scripts/rack-preloader.rb:100:in `preload_app' web_1 | /usr/share/passenger/helper-scripts/rack-preloader.rb:156:in `<module:App>' web_1 | /usr/share/passenger/helper-scripts/rack-preloader.rb:30:in `<module:PhusionPassenger>' web_1 | /usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<main>'</pre> web_1 | web_1 | web_1 | [ 2016-02-08 04:18:44.6935 31/7ff293143700 age/Cor/Con/CheckoutSession.cpp:277 ]: [Client 1-2] Cannot checkout session because a spawning error occurred. The identifier of the error is d3103e16. Please see earlier logs for details about the error.
这是我的Dockerfile
:
FROM phusion/passenger-ruby22:0.9.18 # Set correct environment variables. ENV HOME /root # Use baseimage-docker's init process. CMD ["/sbin/my_init"] # Enable Nginx/Passenger RUN rm -f /etc/service/nginx/down # Enable portals virtual host RUN rm /etc/nginx/sites-enabled/default COPY portals.conf /etc/nginx/sites-enabled/portals.conf RUN mkdir /home/app/webapp # Load env vars into nginx COPY rails-env.conf /etc/nginx/main.d/rails-env.conf # Install gems dependencies COPY Gemfile* /tmp/ WORKDIR /tmp RUN bundle install # Copy rails app WORKDIR /home/app/webapp COPY . ./ RUN chown -R app:app ./ # Clean up APT when done. RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
我尝试运行捆绑软件作为RUN bundle install --deployment
但它没有工作。 我通过rails-env.conf
文件传递RAILS_ENV
和rails-env.conf
,它们都被设置为生产(根据Passenger图像文档,这是默认设置)。
如果我将docker exec -it bash <ID>
放入容器并运行gem list
我会看到所有的gem都已经安装好了,所以我不知道什么是错的。
这个错误是由于过时的软件。 由于乘客图像不会经常更新,因此必须将所有内容都更新到Dockerfile
。 这是我通常基于一个phusion映像build立一个Dockerfile
:
FROM phusion/passenger-ruby22:0.9.18 ENV SYSTEM_UPDATE=1 RUN apt-get update \ && apt-get upgrade -y -o Dpkg::Options::="--force-confold" \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* WORKDIR /home/app COPY Gemfile /home/app/Gemfile COPY Gemfile.lock /home/app/Gemfile.lock RUN gem update --system && \ gem update bundler && \ bundle install --jobs 4 --retry 5 # The rest of your app setup here ENTRYPOINT ["/sbin/my_init", "--"]
SYSTEM_UPDATE
只是一个高速缓冲存储器variables。 当我碰到所有的软件包将在下一个docker版本更新。 它应该经常碰撞。
在运行bundle install
之前,我也确保gem
和bundler
完全是最新的。
另外,将Gemfile
和Gemfile.lock
复制到tmp目录并没有任何好处,只需将其复制到应用程序目录即可。
完成后,您可以删除最终的Clean up APT when done.
命令 – 这真的不是正确的地方。 应该有一个单独的RUN
行,在单层中运行所有apt-get
命令。
对我来说,耙在那里,我使用它来修复它
rake rails:update
玩的开心!