使用Rails 2.3.5绕过机架版本错误

时间:2009-11-29 06:49:46

标签: ruby-on-rails rubygems rack dreamhost

我目前正在Dreamhost上试图运行Rails 2.3.5应用程序。

在这种情况下,Dreamhost的服务器安装了Rails 2.2.2。当然,我无法更新共享主机的rails版本,所以我在供应商中冻结了我的Rails。 Rails 2.3.5需要机架v1.0.1 gem。 Dreamhost使用机架v1.0.0 gem。所以当我尝试定义:

config.gem "rack", :version => "1.0.1"

我明白了:

can't activate rack (~> 1.0.1, runtime) for [], already activated rack-1.0.0 for []

所以我真正需要做的是绕过我的应用程序使用1.0.1的请求,并使用Dreamhost的1.0.0。有谁知道如何配置这个?它甚至可能吗?谢谢你的帮助。

9 个答案:

答案 0 :(得分:6)

Dreamhost现在已经在他们的支持wiki上解决了这个问题。

http://wiki.dreamhost.com/Ruby_on_Rails#Rails_2.3.5_-_Rack_1.0_already_activated_.28fix.29

从该页面开始:

  

使用Rails 2.3.5时,Passenger会遇到问题,因为Rack 1.0已经被激活,因此无法加载Rack 1.0.1。

     

解决此问题的一种方法是冻结Rails并将Rack gem解压缩到vendor / gems / rack-1.0.1

     

一旦Rails和Rack在vendor / rails和vendor / gems / rack-1.0.1中,你必须在文件中修改action_controller:vendor / rails / actionpack / lib / action_controller.rb

     

在第34和35行中必须注释掉并添加以下内容以从供应商/宝石中加载机架

   load "#{RAILS_ROOT}/vendor/gems/rack-1.0.1/lib/rack.rb"
     

最终结果应如下所示:

   #gem 'rack', '~> 1.0.1'
   #require 'rack'
   load "#{RAILS_ROOT}/vendor/gems/rack-1.0.1/lib/rack.rb"
     

真正的问题是Passenger已经加载了Rack 1.0,我相信Passenger必须加载1.0.1才能让这个hack消失。

答案 1 :(得分:4)

rake gems:unpack:dependencies不允许您将rake解压缩到您的vendor / gems文件夹中。

对于Dreamhost问题,你必须做Matt所说的。将导轨冻结至2.3.4。

rake rails:freeze:gems VERSION=2.3.4

Dreamhost使用较旧版本的Passenger预装机架1.0.0。一旦预装了机架1.0.0,就无法加载机架1.0.1。因此,DH最新版本的rails可能是Rails 2.3.4和Rack 1.0.0。

答案 2 :(得分:1)

当我尝试升级到2.3.5时遇到了同样的问题。

我想知道你在哪台服务器仍然运行Rails 2.2.2?我认为Dreamhost现在已经把所有人都移到了2.3.4。我在3个月前和他们抱怨过,他们在第二天就在我的服务器上升级了Passenger,所以我可以安装当前的Rails版本。因此,如果Rails 2.3.5对您的应用程序至关重要,我建议您提交支持服务单。但2.3.4和2.3.5之间没有太多变化,因此您的应用程序在2.3.4上运行的可能性也很大。您是否尝试在vendored 2.3.4上运行它?

这不是一个缺少的宝石,它是关于一个宝石,需要两次不匹配的版本。 rake gems:unpack:dependencies不能解决这个问题(我试过)。

我怀疑Dreamhost的Passenger版本再次出现问题。我的服务器(buenosaires)有乘客2.2.5。最新的乘客版本是2.2.7。

答案 3 :(得分:1)

机架的简单gem更新对我不起作用,因为Rails 2.3.5似乎特别想要Rack 1.0.1。所以,当我做了一个gem更新架-v = 1.0.1时,Rails 2.3.5就开始了。

答案 4 :(得分:1)

显然Rails想要机架1.0.1的整个事情是actionpack中的一个小的依赖性要求错误,可以很容易地解决。

对我来说,在{34}从vendor/rails/actionpack/lib/action_controller.rbgem 'rack', '~> 1.0.1'修改gem 'rack', '~> 1.0'就足够了,问题就消失了。

请参阅:https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/3685-actionpack-235-gem-declares-incompatibility-with-rack-110

答案 5 :(得分:0)

您几乎总是希望将应用程序所依赖的gem解压缩到vendor文件夹中。您可以使用此rake命令执行此操作:

rake gems:unpack:dependencies

这将在您的应用程序的根文件夹下创建一个文件夹vendor/gems,并将您使用config.gem命令声明的所有gem解压缩到其中。

这不仅可以解决rack版本不匹配的问题,而且还可以确保您在开发中使用与生产中完全相同的gems版本,这可以防止许多潜在的问题。将来

答案 6 :(得分:0)

FWIW,我可以确认冻结宝石并不能解决问题;事实上,在我的部署爆炸之前(使用DH的Rack 0.3.0,不知何故!),现在我的旋转爆炸与上面看到的相同错误。如果我想完成任何工作,也许是时候将我的玩具/概念证明应用程序移动到“真实”主机了。

更新:我的服务器于2009年12月24日升级到Rack 1.0.1,为我解决了这个问题。如果您的帐户仍然遇到问题,我建议您使用短信服务;在我的情况下,他们是相当敏感的(通过电子邮件,而不是行动,但价格实际上你不能拥有它)。

答案 7 :(得分:0)

Dreamhost正在更新Rack and Rails:http://www.dreamhoststatus.com/2009/12/21/ruby-gem-updates/

我猜这解决了。

答案 8 :(得分:0)

我认为目前最好解冻所有东西并使用dreamhost上的内容。他们目前有2.3.4的轨道,如果你可以等一两天 - dreamhost正在将rails gems升级到2.3.5(它应该已经在12月21日已经升级了 - 但由于某种原因他们没有解释他们是仍然在2.3.4)。