我正在尝试部署我的第一个Rails应用程序的草稿。它在我当地的WEBRick服务器上运行良好。
然而,在运行Apache2&amp ;;的Ubuntu VPS上乘客,当我在浏览器中导航到应用程序时,我得到:
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上安装了(在应用程序根目录中,ruby -v
返回ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux]
)。
根据this question,我在应用根目录中运行gem install bundle
和bundle install
。我还从本地计算机向VPS应用程序根目录导入了正确的gemset
。
根据this question,我尝试将gem集更改为/home/user/.rvm/gems/ruby-1.9.3-p286@foo
(其中foo是正在使用的gemset的名称),但这只会使回溯更长。
任何有助于进一步排除故障的帮助将非常感谢!
编辑:我终于通过卸载Rails,RVM,Ruby(一个RVM版本)和我的应用程序来运行我的应用程序。重新安装Rails,Passenger& Ruby(但不是RVM)。
答案 0 :(得分:2)
如何设置正确的值
如果您不确定将passenger_ruby设置为什么值,那么您可以找到正确的值,如下所示。
首先,找到passenger-config工具的位置并记下它:
which passenger-config
/opt/passenger/bin/passenger-config
接下来,激活要使用的Ruby解释器(以及适用的gemset)。例如,如果您使用的是RVM并使用Ruby 2.2.1,则可能需要运行此命令:
rvm use 2.2.1
最后,使用完整路径调用passenger-config,并将--ruby-command作为参数传递:
/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'.
输出告诉您要设置的值。
现在转到/ etc / apache2 / mods-available目录中的passenger.conf并粘贴上面显示的所需行。
现在执行以下命令,它对我有用,
a2dismod passenger
a2enmod passenger
service apache2 restart
答案 1 :(得分:1)
您是否更改了/etc/apache2/mods-available/passenger.conf
以更改路径为ruby 1.9.3?
一旦你这样做,不要忘记a2dismod passenger
和a2enmod passenger
。
答案 2 :(得分:0)
尝试在虚拟主机的配置文件中设置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