Ruby on rails Rails Docker容器中的捆绑安装失败
部署docker容器时遇到问题,主要原因是Ruby on rails Rails Docker容器中的捆绑安装失败,ruby-on-rails,docker,rubygems,bundler,Ruby On Rails,Docker,Rubygems,Bundler,部署docker容器时遇到问题,主要原因是bundler无法执行其install命令。使用passenger在本地运行bundle install似乎工作正常,只有部署过程在设置gems时会导致问题 我对Docker比较陌生,我不会称自己为Rails专家。这就是说,我很难理解bundler是如何以这种方式(尤其是与Docker一起)把整个事情搞砸的 我用的是乘客码头基地的图片,如果有任何关联的话 这是我的Gemfile: gem 'doorkeeper' gem 'doorkeeper-jwt'
bundler
无法执行其install
命令。使用passenger
在本地运行bundle install
似乎工作正常,只有部署过程在设置gems时会导致问题
我对Docker
比较陌生,我不会称自己为Rails
专家。这就是说,我很难理解bundler
是如何以这种方式(尤其是与Docker
一起)把整个事情搞砸的
我用的是乘客码头基地的图片,如果有任何关联的话
这是我的Gemfile
:
gem 'doorkeeper'
gem 'doorkeeper-jwt'
gem 'aws-sdk-rails'
gem 'rack-cors', :require => 'rack/cors'
gem 'active_model_serializers', github: 'rails-api/active_model_serializers'
gem 'passenger'
gem 'rails', '4.2.6'
gem 'rails-api'
gem 'pg'
gem 'devise'
gem 'schema_plus'
gem 'pusher'
gem 'sdoc', '~> 0.4.0', group: :doc
group :development, :test do
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
gem 'rspec-rails'
gem 'factory_girl_rails', '~> 4.0'
gem 'database_cleaner'
end
RUN mkdir /home/app/myapp
WORKDIR /home/app/myapp
COPY Gemfile /home/app/myapp/
COPY Gemfile.lock /home/app/myapp/
RUN chown -R app:app /home/app/myapp
RUN sudo -u app bundle install --deployment --verbose --path vendor/cache
ADD . /home/app/myapp
RUN chown -R app:app /home/app/myapp
这是Dockerfile的(部分)
:
gem 'doorkeeper'
gem 'doorkeeper-jwt'
gem 'aws-sdk-rails'
gem 'rack-cors', :require => 'rack/cors'
gem 'active_model_serializers', github: 'rails-api/active_model_serializers'
gem 'passenger'
gem 'rails', '4.2.6'
gem 'rails-api'
gem 'pg'
gem 'devise'
gem 'schema_plus'
gem 'pusher'
gem 'sdoc', '~> 0.4.0', group: :doc
group :development, :test do
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
gem 'rspec-rails'
gem 'factory_girl_rails', '~> 4.0'
gem 'database_cleaner'
end
RUN mkdir /home/app/myapp
WORKDIR /home/app/myapp
COPY Gemfile /home/app/myapp/
COPY Gemfile.lock /home/app/myapp/
RUN chown -R app:app /home/app/myapp
RUN sudo -u app bundle install --deployment --verbose --path vendor/cache
ADD . /home/app/myapp
RUN chown -R app:app /home/app/myapp
当我尝试部署时,会出现以下错误:
来自应用程序的消息:看起来Bundler无法找到
宝石也许您没有安装此应用程序所需的所有gems
需要。要安装gems,请运行:
捆绑安装
如果这不起作用,那么问题可能是由您的
应用程序在不同于预期的环境下运行
到请检查以下内容:
应用程序运行
用户?
block in materialize'
/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/spec_set.rb:85:in
map!'/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/spec_set.rb:85:in
materialize'
/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/definition.rb:140:in
specs'/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/definition.rb:185:in
specs_for'
/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/definition.rb:174:in
requested_specs'/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/environment.rb:18:in
requested_specs'
/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/runtime.rb:13:in
setup'/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler.rb:127:in
setup'
/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/setup.rb:18:in
<top (required)>'/usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in
require'
/usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in
require'/usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:430:in
activate_gem'
/usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:297:in
block in run_load_path_setup_code'/usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:435:in
running_bundler'
/usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:296:in
run_load_path_setup_code'/usr/share/passenger/helper-scripts/rack-preloader.rb:100:in
preload_app'
/usr/share/passenger/helper-scripts/rack-preloader.rb:156:in
<module:App>'/usr/share/passenger/helper-scripts/rack-preloader.rb:30:in
<module:PhusionPassenger>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:29:in
<main>'
/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/spec_set.rb:92:in
物化中的块&39
/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/spec_set.rb:85:in
map!'/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/spec_set.rb:85:in
具体化&39
/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/definition.rb:140:in
specs'/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/definition.rb:185:in &39的规范
/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/definition.rb:174:in 要求的规格'
/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/environment.rb:18:in
要求的规格&39
/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/runtime.rb:13:in
setup'/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler.rb:127:in
setup'
/var/lib/gems/2.1.0/gems/bundler-1.10.6/lib/bundler/setup.rb:18:in
“/usr/lib/ruby/2.1.0/rubygems/core\u ext/kernel\u require.rb:55:in
require'
/usr/lib/ruby/2.1.0/rubygems/core\u ext/kernel\u require.rb:55:in
require'/usr/lib/ruby/vendor\u ruby/phusion\u passenger/loader\u shared\u helpers.rb:430:in
激活gem&39
/usr/lib/ruby/vendor\u ruby/phusion\u passenger/loader\u shared\u helpers.rb:297:in
在运行中阻塞\u加载\u路径\u设置\u代码'/usr/lib/ruby/vendor\u ruby/phusion\u passenger/loader\u shared\u helpers.rb:435:in
运行bundler&39
/usr/lib/ruby/vendor\u ruby/phusion\u passenger/loader\u shared\u helpers.rb:296:in
run\u load\u path\u setup\u code'/usr/share/passenger/helper脚本/rack preload.rb:100:in
预加载应用程序&39
/usr/share/passenger/helper脚本/rack preload.rb:156:in
“/usr/share/passenger/helper脚本/rack preload.rb:30:in
模块:PhusionPassenger和#39
/usr/share/passenger/helper脚本/rack preload.rb:29:in
'
这里的变量太多了。您的问题中不清楚“部署”是什么意思?“当我尝试部署时”--这是类似于
docker run…
还是docker compose…
?或者是Heroku/AWS/DigitalOcean/CF类型的推送?您是本地运行Docker、boot2Docker还是远程运行Docker
通常,是否可能在容器内没有出站连接?你有代理人吗?如果是这样的话,同样的代理设置可能需要在容器中进行——如何进行取决于代理设置和Docker的具体情况
如果您能够将任何网络工具的安装添加到docker文件中,请尝试类似于docker exec curl rubygems.org
(或者如果您没有运行的容器,docker run curl rubygems.org
希望这能帮助你朝着正确的方向开始