【问题标题】:docker apache passenger: error cannot load such file bundler/setup (LoadError)docker apache 乘客:错误无法加载此类文件捆绑器/设置(LoadError)
【发布时间】:2016-01-10 23:59:18
【问题描述】:

我正在尝试使用正在运行的 apache(+passenger)、rails 和 shibboleth 构建一个 docker-image。

不幸的是,我无法让 apache + 乘客运行... 我感谢每一个提示!也许这是一个权限问题?一切都以 root 身份安装,但显然有些进程以无人身份运行(如错误日志中所示)。

我的 docker 基础镜像是“ruby:2.0.0”(debian 8)。在这张图片中,我通过 apt-get 安装了 apache2、apache2-threaded-dev、libapr1-dev、libaprutil1-dev,并通过“gem install Passenger -v 4.0.59”安装了乘客。在此之后,我使用passenger-install-apache2-module 来安装模块。

这是错误日志:

cannot load such file -- bundler/setup (LoadError)
  /usr/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
  /usr/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
  /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:411:in `activate_gem'
  /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:295:in `block in run_load_path_setup_code'
  /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:416:in `running_bundler'
  /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:294:in `run_load_path_setup_code'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:99:in `preload_app'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:153:in `<module:App>'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:28:in `<main>'

Environment (value of RAILS_ENV, RACK_ENV, WSGI_ENV, NODE_ENV and PASSENGER_APP_ENV)
  development

Ruby interpreter command
  /usr/local/bin/ruby

User and groups
  uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)

Apache 乘客负载:

LoadModule passenger_module /usr/local/bundle/gems/passenger-4.0.59/buildout/apache2/mod_passenger.so

Apache 乘客.conf:

IfModule mod_passenger.c>
  PassengerRoot /usr/local/bundle/gems/passenger-4.0.59
  PassengerDefaultRuby /usr/local/bin/ruby
</IfModule>

还有 myapp.conf:

<VirtualHost *:80>
#ServerName yourserver.com

# Tell Apache and Passenger where your app's 'public' directory is
DocumentRoot /var/www/myapp/public

PassengerRuby /usr/local/bin/ruby
RailsEnv development

# Relax Apache security settings
<Directory /var/www/myapp/public>
  Allow from all
  Options -MultiViews
  # Uncomment this if you're on Apache >= 2.4:
  Require all granted
</Directory>

已安装的版本:

apache2 -v
Server version: Apache/2.4.10 (Debian)

ruby -v      
ruby 2.0.0p645 (2015-04-13 revision 50299)

gem -v
2.0.14

rails -v
Rails 4.0.5

passenger-config validate-install 说“一切看起来都不错”。和“乘客状态”:

Version : 4.0.59                                                               
Date    : 2015-10-13 09:03:32 +0000                                            
Instance: 5578                                                                 
----------- General information -----------                                    
Max pool size : 6                                                              
Processes     : 0                                                              
Requests in top-level queue : 0                                                

----------- Application groups -----------                                     
/var/www/myapp#default:                                                        
  App root: /var/www/myapp                                                     
  Requests in queue: 0 

乘客记忆统计:

Version: 4.0.59                                                             
Date   : 2015-10-13 09:05:31 +0000                                          

--------- Apache processes ---------                                        
PID   PPID  VMSize    Private  Name                                         
------------------------------------                                        
5578  1     83.2 MB   ?        /usr/sbin/apache2 -k start                   
5599  5578  363.5 MB  ?        /usr/sbin/apache2 -k start                   
5600  5578  491.5 MB  ?        /usr/sbin/apache2 -k start                   
### Processes: 3                                                            
### Total private dirty RSS: 0.00 MB (?)                                    


-------- Nginx processes --------                                           

### Processes: 0                                                            
### Total private dirty RSS: 0.00 MB                                        


---- Passenger processes -----                                              
PID   VMSize    Private  Name                                               
------------------------------                                              
5581  218.3 MB  ?        PassengerWatchdog                                  
5584  564.5 MB  ?        PassengerHelperAgent                               
5590  217.8 MB  ?        PassengerLoggingAgent                              
### Processes: 3                                                            
### Total private dirty RSS: 0.00 MB (?)

所有正在运行的进程:

ps aux                                                                      
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND       
root         1  0.0  0.0  20300  1780 ?        Ss   08:47   0:00 bash          
root      6077  0.0  0.0  85160  3208 ?        Ss   09:11   0:00 /usr/sbin/apache2 -k start
root      6080  0.0  0.0 223500  2044 ?        Ssl  09:11   0:00 PassengerWatchdog
root      6083  0.0  0.0 578092  5556 ?        Sl   09:11   0:00 PassengerHelperAgent
nobody    6089  0.0  0.0 223028  5008 ?        Sl   09:11   0:00 PassengerLoggingAgent
www-data  6098  0.0  0.0 437788  5452 ?        Sl   09:11   0:00 /usr/sbin/apache2 -k start
www-data  6099  0.0  0.0 437780  5300 ?        Sl   09:11   0:00 /usr/sbin/apache2 -k start

编辑 经过 2 天的搜索和尝试,我找到了一个解决方案(在我在这里发布我的问题之后......):

我必须将它放入我的应用程序的 apache 虚拟主机配置中:

SetEnv GEM_HOME /usr/local/bundle

此解决方案已在https://stackoverflow.com/a/19099768/4846489 上发布

我不知道为什么这是必要的,因为我没有以前的安装(如那里所述)。这真的很奇怪,因为如果我登录到我的 docker 容器(docker exec -u nobody),这个环境变量已经存在了......

【问题讨论】:

    标签: ruby-on-rails ruby apache docker passenger


    【解决方案1】:

    设置GEM_HOME 只是修补了真正的问题。这里的信息是您的提示:

    User and groups:
    id=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
    

    Passenger 正在尝试以“nobody”用户身份运行您的应用。很可能,这不是您的本意。您的 gem 包可能是由其他用户安装的,而“nobody”用户可能无权访问该已安装的 gem 包。

    为什么Passenger 以“无人”的身份运行您的应用程序?因为user sandboxing rules,很可能是你的应用权限错误造成的。你应该解决这个问题。

    顺便问一下,你为什么要构建自己的 Docker 镜像? Phusion 提供了自己的passenger-docker 基础镜像。

    【讨论】:

    • 我对这些东西很陌生(码头工人、铁路、乘客)。我以为是权限问题,但我不知道为什么。但是谢谢你关于沙盒规则的链接,我知道为什么。关于passenger-docker:我知道这张图片,但不幸的是它使用了nginx。我真的需要阿帕奇。在您回答后,我重新考虑使用passenger-ruby20,安装apache + shibboleth。除了 (docker) uid 问题(将代码从我的主机安装到 /home/app 会导致权限问题),现在一切正常。
    猜你喜欢
    • 1970-01-01
    • 2013-10-04
    • 2014-11-23
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多