Ruby on rails &引用;没有要加载的文件--bundler/setup";在Apache/Passenger服务器上
我正在尝试部署我的第一个Rails应用程序的草稿。它在我本地的WEBRick服务器上运行得很好 然而,在运行Apache2&Passenger的Ubuntu VPS上,当我在浏览器中导航到该应用程序时,我得到:Ruby on rails &引用;没有要加载的文件--bundler/setup";在Apache/Passenger服务器上,ruby-on-rails,deployment,rubygems,rvm,bundler,Ruby On Rails,Deployment,Rubygems,Rvm,Bundler,我正在尝试部署我的第一个Rails应用程序的草稿。它在我本地的WEBRick服务器上运行得很好 然而,在运行Apache2&Passenger的Ubuntu VPS上,当我在浏览器中导航到该应用程序时,我得到: Error message: no such file to load -- bundler/setup Exception class: LoadError 使用以下回溯: 0 /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_requi
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
returnsRuby 1.9.3p286(2012-10-12修订版37165)[i686 linux]
)
根据,我已经在应用程序根目录中运行了gem安装bundle
和bundle安装
。我还将正确的gemset
从本地机器导入了VPS应用程序根目录
根据,我尝试将gem集更改为/home/user/.rvm/gems/ruby-1.9.3-p286@foo
(其中foo是正在使用的gemset的名称),但这只会延长回溯时间
如果您有任何进一步的故障排除帮助,我们将不胜感激
编辑:在重新安装Rails、Passenger和Ruby(但不是RVM)之前,我卸载了Rails、RVM、Ruby(RVM版本)和Passenger,终于让我的应用程序正常运行了。尝试在虚拟主机的配置文件上设置GEM\u 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>
ServerName foo.com
SetEnv GEM_HOME/HOME/user/.rvm/gems/ruby-1.9.3-p286
DocumentRoot/home/user/public/foo.com/public
允许超越所有
选项-多视图
问题似乎是,当您执行
bundle install
时,它使用rvm ruby,而当您执行passenger时,它仍然使用ruby 1.8您是否更改了/etc/apache2/mods available/passenger.conf
以更改ruby 1.9.3的路径
完成此操作后,不要忘记
a2dismod乘客
和a2enmod乘客
。如何设置正确的值
如果您不确定要将passenger_ruby设置为什么值,则可以按如下所示找到正确的值
首先,找到乘客配置工具的位置并记下:
which passenger-config
/opt/passenger/bin/passenger-config
接下来,激活您想要使用的Ruby解释器(如果适用,还有gemset)。例如,如果您在RVM上,并且使用Ruby 2.2.1,则可能需要运行以下命令:
rvm use 2.2.1
最后,调用乘客配置及其完整路径,将--ruby命令作为参数传递:
/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可用目录中的passenger.conf,并粘贴上面所示的所需行
现在执行以下命令,它对我有效
a2dismod passenger
a2enmod passenger
service apache2 restart
只是为了确保:您已经运行了
bundle安装
,对吗?@jesper是的,我已经运行了bundle安装
,您最终是如何修复它的?为每个虚拟主机分别设置GEM_HOME还允许您使用不同的ruby和gems版本拥有不同的应用程序,因此这是定义它的最佳位置。感谢您的回复。我添加了此项并重新启动了Apache,但我仍然在相同的回溯中遇到相同的错误。乘客的RubyRoot设置错误,此设置应该不会影响乘客。感谢您的回复。根据昨晚在#rubyonrails上的一次对话,我确信问题与乘客无法找到Ruby的RVM版本有关。但是,在/etc/apache2/mods available/passenger.conf
文件中进行您建议的更改会给我一个500错误。apache错误日志中没有关于该错误的信息。