3

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

根据这个问题,我已经运行gem install bundlebundle install在应用程序根目录中。我还gemset从我的本地机器导入了正确的 VPS 应用程序根目录。

根据这个问题,我试图将 gem set 更改为/home/user/.rvm/gems/ruby-1.9.3-p286@foo(其中 foo 是正在使用的 gemset 的名称),但这只会使回溯更长。

任何帮助进一步解决此问题将不胜感激!

编辑:在重新安装 Rails、Passenger 和 Ruby(但不是 RVM)之前,我终于通过卸载 Rails、RVM、Ruby(RVM 版本)和Passenger 让我的应用程序正常运行。

4

3 回答 3

2

如何设置正确的值

如果您不确定将passenger_ruby 设置为什么值,则可以按如下方式找出正确的值。

首先,找出乘客配置工具的位置并记下它:

    which passenger-config
    /opt/passenger/bin/passenger-config

接下来,激活您要使用的 Ruby 解释器(如果适用,还可以激活 gemset)。例如,如果您在 RVM 上并且使用 Ruby 2.2.1,则可能需要运行以下命令:

    rvm use 2.2.1

最后,使用其完整路径调用乘客配置,将 --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 目录中的乘客.conf 并粘贴上面显示的所需行。

现在执行以下命令,它对我有用,

    a2dismod passenger
    a2enmod passenger
    service apache2 restart
于 2016-07-05T07:41:32.307 回答
1

您是否更改了/etc/apache2/mods-available/passenger.confruby​​ 1.9.3 的路径?

不要忘记a2dismod passengeranda2enmod passenger一旦你这样做了。

于 2012-10-27T09:07:15.253 回答
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

于 2012-10-26T20:10:48.723 回答