【问题标题】:Phusion Passenger Web application could not be started / picks wrong rubyPhusion 乘客 Web 应用程序无法启动/选择错误的 ruby
【发布时间】:2014-07-07 02:57:57
【问题描述】:

我的 RoR 应用无法启动,出现错误:

看起来 Bundler 找不到 gem。可能你没有安装 此应用程序需要的所有宝石。要安装您的 gem,请 运行:

捆绑安装

如果这不起作用,那么问题可能是由您的 应用程序在与预期不同的环境下运行 到。请检查以下内容:

Is this app supposed to be run as the railsapp user?
Is this app being run on the correct Ruby interpreter? Below you will see which Ruby interpreter Phusion Passenger attempted to use.

Ruby interpreter command

    /usr/bin/ruby1.8

文件 config/environment.rb 归 railsapp 用户所有。 我使用 rbenv,并安装了 ruby​​ 版本 2.1.1 作为全局版本。 我使用捆绑器来安装 gem 依赖项。没关系。

看来,phusion 乘客选择了错误的 ruby​​ 版本(至少不是我使用 rbenv 安装为全局的那个)。

如何让 Phusion 乘客使用 rbenv 安装的 ruby​​ 版本编译 mod_rails?

当我运行:passenger-install-apache2-module 时,我注意到它从 ubuntu 获取了系统安装的 ruby​​ 版本:

* Checking for Ruby development headers...
      Found: yes
      Location: /usr/lib/ruby/1.8/i486-linux/ruby.h

但是'which ruby​​'作为 railsapp 用户给出了这个:

/home/railsapp/.rbenv/shims/ruby

我的gem环境是这样的:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.2.2
  - RUBY VERSION: 2.1.1 (2014-02-24 patchlevel 76) [i686-linux]
  - INSTALLATION DIRECTORY: /home/railsapp/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0
  - RUBY EXECUTABLE: /home/railsapp/.rbenv/versions/2.1.1/bin/ruby
  - EXECUTABLE DIRECTORY: /home/railsapp/.rbenv/versions/2.1.1/bin
  - SPEC CACHE DIRECTORY: /home/railsapp/.gem/specs
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-linux
  - GEM PATHS:
     - /home/railsapp/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0
     - /home/railsapp/.gem/ruby/2.1.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /home/railsapp/.rbenv/versions/2.1.1/bin
     - /etc/rbenv/libexec
     - /home/railsapp/.rbenv/shims
     - /etc/rbenv/bin
     - /usr/local/sbin
     - /usr/local/bin
     - /usr/sbin
     - /usr/bin
     - /sbin
     - /bin
     - /usr/games

【问题讨论】:

    标签: ruby-on-rails-3 gem passenger


    【解决方案1】:

    对于 apache/nginx,您可以执行以下操作:

    which passenger-config
    
    rvm use 2.2.1 # Use the version you want
    
    opt/passenger/bin/passenger-config --ruby-command # Use the path that was returned by the firth command.
    

    来源:https://www.phusionpassenger.com/library/config/nginx/reference/#setting_correct_passenger_ruby_value

    【讨论】:

    • 让我在下一步添加正确答案:然后打开 sudo nano /etc/nginx/sites-enabled/your-site.conf 并将旧版本 ruby​​ 更改为新版本
    【解决方案2】:

    Apache/Passenger 特定

    我已经这样做了,这个问题的答案在于 httpd.conf(通常位于 /etc/httpd/conf/httpd.conf)当您更新 Ruby 或乘客版本时,Apache LoadModule 会完全失控。

    在正确配置文件的底部附近,您会看到一个可能会这样说的部分:

    LoadModule passenger_module /usr/local/rvm/gems/ruby-2.1.2/gems/passenger-  4.0.48/buildout/apache2/mod_passenger.so
    <IfModule mod_passenger.c>
    PassengerRoot /usr/local/rvm/gems/ruby-2.1.2/gems/passenger-4.0.48
     PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.1.2/wrappers/ruby
    

    更改LoadModule,确保更新ruby-2.X.Xpassenger-X.X.X。您还必须更新乘客的依赖项,which are best done through a reinstall (so you generate the correct symlinks).

    【讨论】:

      【解决方案3】:

      使用PassengerRuby 配置选项。请参阅官方文档。

      【讨论】:

      • 以及 OP 如何以及在何处需要这样做?它可能会回答这个问题,但它不需要更多的上下文吗?
      • 谢谢宏利,他看说明书了吗?顺便说一句,您在文档中提到了“全局服务器配置”,那么这是什么意思?
      • @rene Phusion Passenger 官方网站,当然在“文档”下。这不是寻找文档的显而易见的第一个地方吗?
      • @user2736833 Web 服务器配置文件由上下文组成。有一个全局上下文、每个虚拟主机上下文、每个位置上下文等。对于 Apache,请参阅httpd.apache.org/docs/2.2/mod/directive-dict.html#Context。 Nginx 没有等效的文档,但概念是相同的。
      • @Hongli 我并不是说看那里并不明显,但我希望你能在这里总结一下该文档中的内容......但也许这只是我......跨度>
      猜你喜欢
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 2017-02-15
      • 2012-03-14
      相关资源
      最近更新 更多