Phusion乘客错误:您已激活机架1.2.1,但您的Gemfile需要机架1.2.2

问题描述:

我试图在Dreamhost共享服务器上运行Ruby on Rails应用程序。目前为止,除了一个我无法解开的奇怪的错误之外,目前为止都是如此。Phusion乘客错误:您已激活机架1.2.1,但您的Gemfile需要机架1.2.2

有时,当我访问网络应用程序,我得到提出了一个的Phusion客运错误说,

You have already activated rack 1.2.1, but your Gemfile requires rack 1.2.2. Consider using bundle exec.

当我刚刚刷新它似乎工作的页面,虽然 - 没有更多的Phusion客运错误消息。

下列其他堆栈溢出线程和类似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

+0

我的网站现在工作正常! – aren55555 2011-11-18 20:16:49

尝试编辑后重新启动您的服务器在你的Gemfile,并把这个:gem 'rack', '1.2.1'

+0

当我在生产服务器上执行“捆绑安装”时,出现以下内容: '您请求:rack = 1.2.1该捆绑包目前机架锁定在1.2.2。尝试运行'包更新机架' 因此,我运行命令'包更新机架',我认为一切都成功更新。这个错误的问题是需要一些时间来重现(我知道它很奇怪) - 我会回过头来验证这是否是解决方案。 – aren55555 2011-04-26 01:52:37

+0

删除'Femfile.lock',然后尝试'bundle install'。原因Gemfile.lock具有当前用于Rails应用程序的gem及其版本的信息,该信息由您的bundle命令首先生成。 – Surya 2011-04-26 04:09:54

+0

'* Gemfile.lock' – Surya 2011-04-27 04:41:15

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

gem install rack 

然后架(1.2.2截至目前)的最新版本将得到安装到您的家庭的宝石文件夹(〜/ .gems)。当乘客启动时,它将使用1.2.2。

+0

尽管@Surya有一个看似有效的解决方案,但我会试一试。 – aren55555 2011-04-27 04:32:11

+0

我试过这个解决方案,但几天后仍然出现错误的机架错误。 – 2011-05-21 16:41:45

这可能值得检查一下。有人提出一种方式来获得与调试工作客运Rails的& 3 - http://duckpunching.com/passenger-mod_rails-for-development-now-with-debugger

长时间不活动后,我已经收到了类似的错误在DreamHost的VPS几个西纳特拉应用:

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/ 

我为发生的事情是,后乘客被“唤醒”,由于某种原因,它看起来第一(或者)猜测系统级的Gems,选择Rack 1.2.1作为最新版本。我的短期哈克的解决办法是简单地安装机架1.3.0有:

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

这似乎已经奏效。希望这有助于任何人在那里撕掉他们的头发。

+0

是的,我有同样的问题。谢谢 – jspooner 2011-07-11 02:32:00

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

  1. 加入Gemfile中:创业板架“, '1.2.1'
  2. 软件包更新
  3. 卸载机架版本> 1.2。1

    [黄蜂] $宝石清单| grep的齿条

    机架(1.2.1,1.1.0,1.0.1,1.0.0)

  4. 触摸TMP/restart.txt

  5. :)快乐

我也有类似的问题与Apache:“你已经激活架1.2.3,但你的Gemfile需要机架1.2.2考虑使用捆绑高管。”

的问题是,乘客安装机架1.2.3和我的Rails应用程序机架1.2.2:

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

尝试:

$ gem uninstall --version=1.2.3 rack 

重启服务器和解决

我解决这样在Dreamhost上:

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

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

安装/使用本地的宝石和重新生成文件 'Gemfile.lock的' 有:

bundle install 

在厂商安装宝石/捆

bundle install --deployment 

重启:

touch tmp/restart.txt 

我在这个问题上与这个问题进行了数小时的斗争盟友放弃乘客。任何新版本的Rails将使用比Dreamhost的Passenger要求更新的Rack。

但是,您不需要Passenger来启动应用程序。 Dreamhost的提供了一些有关如何使用FastCGI启动应用程序很容易(和工作)的指令,你不会有损坏您的Gemfile在这个过程中:

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

这个作品在Rails的3.0.x中&客运3.0.15

创建一个文件:

config/setup_load_paths.rb 

与内容:

require 'rubygems' 
require 'bundler/setup' 

乘客将载入您的Gemfile.lock中指定的机架宝石

+0

+1我相信这是正确的答案(请参阅[乘客文档](http://modrails.com/documentation/Users%20guide%20Apache.html#bundler_support))。我自己通过阅读'lib/phusion_passenger/utils.rb'来解决这个问题,但是当我再次遇到问题时后来忘记了它。感谢您的提醒。当您*在不同机架版本上运行应用程序时,此方法尤其有效。 – Kelvin 2013-03-03 03:40:07