docker apache passenger: 错误无法加载此类文件 bundler/setup (LoadError)
docker apache passenger: error cannot load such file bundler/setup (LoadError)
我正在尝试使用 运行 apache (+passenger)、rails 和 shibboleth 构建一个 docker-image。
不幸的是我无法获得 apache + passenger 运行 ...
我感谢每一个提示!也许这是一个权限问题?一切都以 root 身份安装,但显然某些进程 运行 为 nobody(如错误日志中所示)。
我的 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。之后我使用 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
passenger-config validate-install 说 "Everything looks good"。并且 'passenger-status':
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 天的搜索和尝试,我找到了一个解决方案(就在我 post 这里我的问题之后......):
我必须将其放入我的应用程序的 apache 虚拟主机配置中:
SetEnv GEM_HOME /usr/local/bundle
此解决方案已 post 发表于
我不知道为什么这是必要的,因为我没有以前的安装(如那里所述)。这真的很奇怪,因为如果我登录到我的 docker 容器(docker exec -u nobody)...
,这个环境变量已经存在了
设置GEM_HOME
只是解决了真正的问题。这里的信息是你的提示:
User and groups:
id=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
Passenger 正在尝试 运行 您的应用作为用户 'nobody'。很可能,这不是您的本意。您的 gem 包可能是由其他用户安装的,并且 'nobody' 用户可能无权访问已安装的 gem 包。
为什么 Passenger 运行 将您的应用程序设置为 'nobody'?由于 user sandboxing rules,很可能是您的应用权限错误导致的。你应该解决这个问题。
顺便问一下,您为什么要构建自己的 Docker 图像? Phusion 提供自己的 passenger-docker 基础映像。
我正在尝试使用 运行 apache (+passenger)、rails 和 shibboleth 构建一个 docker-image。
不幸的是我无法获得 apache + passenger 运行 ... 我感谢每一个提示!也许这是一个权限问题?一切都以 root 身份安装,但显然某些进程 运行 为 nobody(如错误日志中所示)。
我的 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。之后我使用 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
passenger-config validate-install 说 "Everything looks good"。并且 'passenger-status':
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 天的搜索和尝试,我找到了一个解决方案(就在我 post 这里我的问题之后......):
我必须将其放入我的应用程序的 apache 虚拟主机配置中:
SetEnv GEM_HOME /usr/local/bundle
此解决方案已 post 发表于
我不知道为什么这是必要的,因为我没有以前的安装(如那里所述)。这真的很奇怪,因为如果我登录到我的 docker 容器(docker exec -u nobody)...
,这个环境变量已经存在了设置GEM_HOME
只是解决了真正的问题。这里的信息是你的提示:
User and groups:
id=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
Passenger 正在尝试 运行 您的应用作为用户 'nobody'。很可能,这不是您的本意。您的 gem 包可能是由其他用户安装的,并且 'nobody' 用户可能无权访问已安装的 gem 包。
为什么 Passenger 运行 将您的应用程序设置为 'nobody'?由于 user sandboxing rules,很可能是您的应用权限错误导致的。你应该解决这个问题。
顺便问一下,您为什么要构建自己的 Docker 图像? Phusion 提供自己的 passenger-docker 基础映像。