“在Apache / Passenger服务器上没有要加载的文件 - bundler / setup”

时间:2012-10-26 18:20:02

标签: ruby-on-rails deployment rubygems rvm bundler

我正在尝试部署我的第一个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 bundlebundle 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)。

3 个答案:

答案 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 passengera2enmod 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