2016-02-08 2 views
2

Я пытаюсь развернуть приложение Rails с помощью Docker и Phusion Passenger Ruby base image, но всякий раз, когда я пытаюсь получить доступ к приложению из браузера, я получить эту ошибку:Ошибка «Не удалось найти rake-10.5.0 в любом из источников» на Phusion Passenger Docker image

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&#39; 
web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/spec_set.rb:85:in `map!&#39; 
web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/spec_set.rb:85:in `materialize&#39; 
web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/definition.rb:140:in `specs&#39; 
web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/definition.rb:185:in `specs_for&#39; 
web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/definition.rb:174:in `requested_specs&#39; 
web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/environment.rb:18:in `requested_specs&#39; 
web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/runtime.rb:13:in `setup&#39; 
web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler.rb:127:in `setup&#39; 
web_1 | /var/lib/gems/2.2.0/gems/bundler-1.10.6/lib/bundler/setup.rb:18:in `&lt;top (required)&gt;&#39; 
web_1 | /usr/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require&#39; 
web_1 | /usr/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require&#39; 
web_1 | /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:430:in `activate_gem&#39; 
web_1 | /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:297:in `block in run_load_path_setup_code&#39; 
web_1 | /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:435:in `running_bundler&#39; 
web_1 | /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:296:in `run_load_path_setup_code&#39; 
web_1 | /usr/share/passenger/helper-scripts/rack-preloader.rb:100:in `preload_app&#39; 
web_1 | /usr/share/passenger/helper-scripts/rack-preloader.rb:156:in `&lt;module:App&gt;&#39; 
web_1 | /usr/share/passenger/helper-scripts/rack-preloader.rb:30:in `&lt;module:PhusionPassenger&gt;&#39; 
web_1 | /usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `&lt;main&gt;&#39;</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/* 

Я попытался запустить Bundler, как RUN bundle install --deployment, но он не работает, как хорошо. Я передаю RAILS_ENV и PASSENGER_APP_ENV через файл rails-env.conf, и оба они настроены на производство (что по умолчанию соответствует документам изображений пассажира).

Если я docker exec -it bash <ID> в контейнер и запустите gem list Я вижу, что все драгоценные камни установлены, поэтому я не знаю, что случилось.

+0

странно иметь «CMD», который не близок к концу файла Docker – user2915097

+0

¯ \ _ (ツ) _/¯ именно так у него есть https://github.com/phusion/passenger-docker# get-started –

+1

Не уверен, что это поможет, но убедитесь, что вы обновили gem и bundler: 'RUN gem update --system && gem update bundler'. Действительно, вы должны обновить все пакеты с помощью 'RUN apt-get update && apt-get upgrade -y'. –

ответ

2

Эта ошибка возникает из-за устаревшего программного обеспечения. Поскольку изображения пассажиров не обновляются часто, важно обновить все в своем Dockerfile. Это, как я вообще настроить Dockerfile на основе покинуть Phusion изображение:

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 это просто переменная кэш попойка. Когда я поднимусь, все пакеты будут обновлены в следующей сборке докеров. Это должно часто возникать.

Я также гарантирую, что gem и bundler полностью обновлены до запуска bundle install.

Кроме того, нет никакой пользы для копирования Gemfile и Gemfile.lock в каталог tmp, просто скопируйте его в каталог приложения.

Вы можете удалить свою окончательную команду Clean up APT when done. - это действительно не подходящее место для этого. Должна быть одна строка RUN, которая запускает все команды apt-get в одном слое.

Посмотрите на https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/ на лучший способ создания файла Docker, особенно разделы об использовании apt-get.

+0

Удивительный! Спасибо :) –

+0

Я получаю ту же ошибку, но у меня нет идеи, что такое Dockerfile. Я только что установил phusion-пассажира, используя 'gem install пассажир', а затем' пассажир-install-nginx-module'. Как я могу обновить пассажира? –

0

Для меня, Рейк был там, я это исправить с помощью

rake rails:update

получайте удовольствие!

Смежные вопросы