我正在尝试部署我的第一个铁路应用程序的草稿。它在我本地的Webrick Server上效果很好。
但是,在我的Ubuntu VPS上运行Apache2&乘客,当我在浏览器中导航到该应用时,我会得到:
Error message:
no such file to load -- bundler/setup
Exception class:
LoadError
带有以下回溯:
0 /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb 36 in `gem_original_require'
1 /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb 36 in `require'
2 /home/user/public/foo.com/config/boot.rb 6
3 /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb 36 in `gem_original_require'
4 /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb 36 in `require'
5 /home/user/public/foo.com/config/application.rb 1
6 /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb 36 in `gem_original_require'
7 /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb 36 in `require'
8 /home/user/public/foo.com/config/environment.rb 2
9 /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb 36 in `gem_original_require'
10 /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb 36 in `require'
11 config.ru 3
12 /usr/lib/ruby/vendor_ruby/rack/builder.rb 51 in `instance_eval'
13 /usr/lib/ruby/vendor_ruby/rack/builder.rb 51 in `initialize'
14 config.ru 1 in `new'
15 config.ru 1
该应用程序是使用Ruby v1.9.3(或我认为)构建的,我已经在Ubuntu上安装了该应用程序(在应用程序root中,ruby -v
返回ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux]
)。
根据这个问题,我在应用程序根中运行gem install bundle
和bundle install
。我还将正确的gemset
从本地计算机导入到VPS App root。
根据这个问题,我试图将设置的宝石设置为 /home/user/.rvm/gems/ruby-1.9.3-p286@foo
(其中foo是使用中的宝石的名称),但这只是使backtrace更长。
任何有助于进一步故障排除,这将不胜感激!
编辑:我终于通过卸载Rails,rvm,Ruby(RVM版本)&乘客在重新安装导轨之前,乘客&Ruby(但不是RVM)。
如何设置正确的值
如果您不确定要将pastenger_ruby设置为什么值,则可以找到正确的值。
首先,找出乘客config工具的位置,并记下它:
which passenger-config
/opt/passenger/bin/passenger-config
接下来,激活您要使用的Ruby解释器(如果适用,则是GEMSET)。例如,如果您在RVM上并且使用Ruby 2.2.1,则可能需要运行此操作:
rvm use 2.2.1
最后,用它的完整路径调用乘客 - config,通过 - 卢比命令作为参数:
/opt/passenger/bin/passenger-config --ruby-command
passenger-config was invoked through the following Ruby interpreter:
Command: /usr/local/rvm/wrappers/ruby-1.8.7-p358/ruby
Version: ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
To use in Apache: PassengerRuby /usr/local/rvm/wrappers/ruby-1.8.7- p358/ruby
To use in Nginx : passenger_ruby /usr/local/rvm/wrappers/ruby-1.8.7-p358/ruby
To use with Standalone: /usr/local/rvm/wrappers/ruby-1.8.7-p358/ruby /opt/passenger/bin/passenger start
## Notes for RVM users
Do you want to know which command to use for a different Ruby interpreter? 'rvm use' that Ruby interpreter, then re-run 'passenger-config --ruby-command'.
输出告诉您要设置什么值。
现在goto pasterenger.conf in/etc/apache2/mods-可用目录和粘贴所需的行。
现在执行以下命令,对我有用,
a2dismod passenger
a2enmod passenger
service apache2 restart
您是否更改了/etc/apache2/mods-available/passenger.conf
将路径更改为Ruby 1.9.3?
这样做后就不要忘记a2dismod passenger
和a2enmod passenger
。
尝试在虚拟主机的配置文件上设置GEM_HOME:
<VirtualHost *:80>
ServerName foo.com
SetEnv GEM_HOME /home/user/.rvm/gems/ruby-1.9.3-p286
DocumentRoot /home/user/public/foo.com/public
<Directory /home/user/public/foo.com/public>
AllowOverride all
Options -MultiViews
</Directory>
</VirtualHost>
问题似乎是当您执行bundle install
时,它使用RVM Ruby,而当您执行乘客时,它仍然使用Ruby 1.8