dockerapache乘客:错误不能加载这样的文件捆绑器/设置(LoadError)

我试图build立一个运行Apache(+乘客),铁路和shibbolethdocker形象。

不幸的是,我不能得到apache +乘客运行…我欣赏每一个提示! 也许这是一个权限问题? 一切都以root身份进行安装,但显然有些进程是以nobody身份运行的(如错误日志所示)。

我的docker基础图像是“ruby:2.0.0”(debian 8)。 在这个图像中,我通过apt-get和乘客通过“gem install passenger -v 4.0.59”安装了apache2,apache2-threaded-dev,libapr1-dev,libaprutil1-dev。 在此之后,我使用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 passenger.load:

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

Apache passenger.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 

乘客configurationvalidation安装说“一切看起来不错”。 和“旅客身份”:

 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天的search和尝试,我发现了一个解决scheme(就在我发布后,我的问题…):

我必须把这个到我的应用程序的我的apache虚拟主机configuration:

 SetEnv GEM_HOME /usr/local/bundle 

此解决scheme是在https://stackoverflow.com/a/19099768/4846489上的 postet

我不知道为什么这是必要的,因为我没有以前的安装(如上所述)。 这真的很奇怪,因为这个环境variables已经存在,如果我login到我的docker容器(docker执行 – u人)…

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

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

乘客试图运行你的应用程序作为用户'没有'。 很可能,这不是你要做的。 您的gem包可能由其他用户安装,而“nobody”用户可能无法访问该已安装的gem包。

为什么乘客将您的应用程序运行为“无人”? 由于用户沙箱规则 ,很可能是由您的应用程序的权限错误造成的。 你应该解决这个问题。

顺便说一句,你为什么build立你自己的Docker镜像? Phusion提供了自己的客运docker基础图像。