Ruby on rails Phusion乘客错误:您已激活机架1.2.1,但您的Gemfile需要机架1.2.2
我正在尝试在Dreamhost共享服务器上运行Ruby on Rails应用程序。到目前为止,一切都很好,除了一个奇怪的错误,我还没有解开 有时,当我访问web应用程序时,我会看到一个Phusion乘客错误,说 您已经激活了rack 1.2.1,但您的Gemfile需要rack 1.2.2。考虑使用束Exc. 当我刚刚刷新页面时,它似乎工作了,但是-没有更多的Phusion乘客错误消息 继其他堆栈溢出线程和类似线程之后,我在Ruby on rails Phusion乘客错误:您已激活机架1.2.1,但您的Gemfile需要机架1.2.2,ruby-on-rails,ruby,rubygems,passenger,dreamhost,Ruby On Rails,Ruby,Rubygems,Passenger,Dreamhost,我正在尝试在Dreamhost共享服务器上运行Ruby on Rails应用程序。到目前为止,一切都很好,除了一个奇怪的错误,我还没有解开 有时,当我访问web应用程序时,我会看到一个Phusion乘客错误,说 您已经激活了rack 1.2.1,但您的Gemfile需要rack 1.2.2。考虑使用束Exc. 当我刚刚刷新页面时,它似乎工作了,但是-没有更多的Phusion乘客错误消息 继其他堆栈溢出线程和类似线程之后,我在config/environment.rb文件的顶部添加了以下内容:
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
在编辑gem文件后尝试重新启动服务器,并将以下内容放入:
gem'rack',1.2.1'
我刚刚在Dreamhost上遇到这个问题。问题是Dreamhost服务器安装了rack 1.2.1,而您的Gemfile正在加载1.2.2。我发现如果我只安装机架:
gem install rack
然后最新版本的rack(目前为1.2.2)将安装到您的主gems文件夹(~/.gems)。当乘客启动时,它将使用1.2.2。这可能值得检查一下。有人设法让调试器使用Passenger&Rails 3-在长时间不活动之后,我在DreamHost VPS上的几个Sinatra应用程序中收到了类似的错误:
Phusion乘客错误:您已激活rack 1.2.1,但您的Gemfile需要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/
[psXXXXX]$gem env
RubyGems环境:
-RUBYGEMS版本:1.3.6
-RUBY版本:1.8.7(2008-08-11 patchlevel 72)[x86_64-linux]
-安装目录:/home/XXXXXXXXX/.gems/
-RUBY可执行文件:/usr/bin/ruby1.8
-可执行目录:/home/XXXXXXXXX/.gems/bin
-RUBYGEMS平台:
-红宝石
-x86_64-linux
-宝石路径:
-/home/XXXXXXXXX/.gems/true
-:benchmark=>false
-:backtrace=>false
-:批量_阈值=>1000
-远程来源:
- http://rubygems.org/
我猜测,在乘客“醒来”后,出于某种原因,它首先(或可能只是)在系统级别上查看Gems,选择Rack 1.2.1作为最新版本。我的短期黑客解决方案只是在那里安装Rack 1.3.0:
gem安装框架-v1.3.0--install dir/usr/lib/ruby/gems/1.8
这似乎奏效了。希望这对其他人有帮助。我也有同样的问题:“您已经激活了rack 1.2.1,但您的Gemfile需要rack 1.2.3”
我和Apache有类似的问题:“您已经激活了1.2.3机架,但是您的GEMFILE需要机架1.2.2。考虑使用捆绑Excel。”
问题在于乘客安装机架1.2.3和我的rails应用程序机架1.2.2:$ gem list |grep rack
rack (1.2.2, 1.2.3)
尝试:
重新启动服务器并解决问题我在Dreamhost上以这种方式解决: 从Gemfile中删除任何行:gem'rack'
rm Gemfile.lock
rm -rf .bundle
rm -rf vendor/bundle
本地安装/使用gems,并使用以下命令重新生成文件“Gemfile.lock”:
bundle install
在供应商/捆绑包中安装gems
bundle install --deployment
重新启动:
touch tmp/restart.txt
我与这个问题斗争了好几个小时,最终放弃了对乘客的要求。任何新版本的Rails都将使用比Dreamhost的乘客所需的更新机架 但是,启动应用程序不需要乘客。Dreamhost提供了一些关于如何使用FastCGI引导应用程序的非常简单(且有效)的说明,您不必在引导过程中损坏您的GEM文件:
这适用于Rails 3.0.x和Passenger 3.0.15 创建一个文件:
config/setup_load_paths.rb
内容包括:
require 'rubygems'
require 'bundler/setup'
然后,乘客将加载gem文件中指定的机架gem。锁定当我在生产服务器上执行
捆绑安装
时,我得到以下信息:您已请求:机架=1.2.1捆绑当前机架锁定在1.2.2。尝试运行“bundle update rack”
,因此我运行了命令bundle update rack
,我认为所有内容都已成功更新。此错误的问题是需要一些时间才能重现(我知道这很奇怪)-我会返回给您以验证这是否是解决方案。删除Femfile.lock
,然后尝试捆绑安装
。因为Gemfile.lock有gem的信息和当前用于rails应用程序的版本,这是由第一个bundle命令生成的。我将尝试一下,尽管@Surya有一个看似有效的解决方案。我尝试了这个解决方案,但几天后仍然出现了错误的机架错误。我的站点现在工作正常+我相信这是正确的答案(参见)。我通过阅读lib/phusion\u passenger/utils.rb
自己解决了这个问题,但后来当我再次遇到这个问题时就忘了。谢谢你的提醒。当您被迫在不同的机架版本上运行应用程序时,此方法尤其有效。
require 'rubygems'
require 'bundler/setup'