Phusion Passenger Error:您已激活机架1.2.1,但您的Gemfile需要机架1.2.2

时间:2011-04-25 02:11:55

标签: ruby-on-rails ruby rubygems passenger dreamhost

我正在尝试在Dreamhost共享服务器上运行Ruby on Rails应用程序。到目前为止一切都很顺利,除了一个我无法解开的奇怪的错误。

有时当我访问网络应用时,我会收到Phusion Passenger错误,

  

您已经激活了机架1.2.1,但您的Gemfile需要机架1.2.2。考虑使用bundle exec。

当我只是刷新页面时,似乎工作正常 - 不再有Phusion Passenger错误消息。

在其他堆栈溢出线程和类似的Dreamhost wiki之后,我将以下内容添加到config/environment.rb文件的顶部:

if ENV['RAILS_ENV'] == 'production'  # don't bother on dev
  ENV['GEM_PATH'] = '/home/myusername/.gems' + ':/usr/lib/ruby/gems/1.8'
end

enter image description here

9 个答案:

答案 0 :(得分:9)

尝试在Gemfile中编辑后重新启动服务器并将其放入:gem 'rack', '1.2.1'

答案 1 :(得分:7)

这适用于Rails 3.0.x&乘客3.0.15

创建一个文件:

config/setup_load_paths.rb

内容:

require 'rubygems'
require 'bundler/setup'

Passenger将加载Gemfile.lock

中指定的rack gem

答案 2 :(得分:5)

经过长时间的不活动,我在DreamHost VPS上收到了几个Sinatra应用程序的类似错误:

Phusion Passenger Error: You have activated rack 1.2.1, but your Gemfile requires rack 1.3.0.

就像@ aren55555描述的那样,如果你只是刷新页面,那么错误就会消失。以下是我发现的有关服务器配置的内容:

[psXXXXX]$ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.6
  - RUBY VERSION: 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
  - INSTALLATION DIRECTORY: /home/XXXXXXXXX/.gems/
  - RUBY EXECUTABLE: /usr/bin/ruby1.8
  - EXECUTABLE DIRECTORY: /home/XXXXXXXXX/.gems/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /home/XXXXXXXXX/.gems/               <-- Rack 1.3.0 Gem was installed here
     - /usr/lib/ruby/gems/1.8               <-- Rack 1.2.1 Gem was installed here
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

我猜测发生的事情是,在乘客“醒来”之后,出于某种原因,它正在向系统中的宝石看第一个(或者可能) -level,选择Rack 1.2.1作为最新版本。我的短期hacky解决方案只是在那里安装Rack 1.3.0:

gem install rack -v 1.3.0 --install-dir /usr/lib/ruby/gems/1.8

似乎有效。希望这对任何在那里撕裂头发的人都有帮助。

答案 3 :(得分:5)

我有同样的问题:“你已经激活了机架1.2.1,但你的Gemfile需要机架1.2.3”

  1. 添加到Gemfile:gem' rack','1.2.1'
  2. 捆绑更新
  3. 卸载机架版本&gt; 1.2.1

    [wasp] $ gem list | grep rack

    rack(1.2.1,1.1.0,1.0.1,1.0.0)

  4. 触摸tmp / restart.txt

  5. :)快乐

答案 4 :(得分:3)

我在Dreamhost上解决了这个问题:

从Gemfile中删除任何一行:gem'bag',....

rm Gemfile.lock
rm -rf .bundle
rm -rf  vendor/bundle

在本地安装/使用gems并使用以下命令重新生成文件'Gemfile.lock'。

bundle install

在vendor / bundle中安装gems

bundle install --deployment

重启:

touch tmp/restart.txt

答案 5 :(得分:2)

我刚刚在Dreamhost上遇到了这个问题。问题是Dreamhost服务器安装了机架1.2.1,并且您的Gemfile正在加载1.2.2。我发现如果我只是安装机架:

gem install rack

然后,最新版本的机架(目前为1.2.2)将安装到您的home gems文件夹(〜/ .gems)。当乘客启动时,它将使用1.2.2。

答案 6 :(得分:2)

我遇到类似Apache的问题:“你已经激活了机架1.2.3,但你的Gemfile需要机架1.2.2。考虑使用bundle exec。”

问题在于Passenger安装机架1.2.3和我的导轨APP机架1.2.2:

$ gem list |grep rack
rack (1.2.2, 1.2.3)

尝试:

$ gem uninstall --version=1.2.3 rack

重启服务器并解决了

答案 7 :(得分:1)

在最终放弃乘客之前,我在这个问题上奋斗了好几个小时。任何新版本的Rails都将使用比Dreamhost的Passenger更新的Rack。

但是,您不需要Passenger来启动应用程序。 Dreamhost提供了一些关于如何使用FastCGI启动应用程序的非常简单(和工作)的说明,并且您不必在此过程中损坏您的Gemfile:

http://wiki.dreamhost.com/Rails_3#Using_FastCGI

答案 8 :(得分:0)

这可能值得一试。有人想让调试人员使用Passenger&amp; Rails 3 - http://duckpunching.com/passenger-mod_rails-for-development-now-with-debugger