8

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

这里的情况是,Dreamhost 的服务器安装了 Rails 2.2.2。当然,我不能更新共享主机的 rails 版本,所以我在 vendor.js 中冻结了我的 Rails。Rails 2.3.5 需要 rack v1.0.1 gem。Dreamhost 使用 rack 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。有谁知道如何配置这个?甚至可能吗?谢谢您的帮助。

4

9 回答 9

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.1 无法加载,因为 Rack 1.0 已经激活。

解决此问题的一种方法是冻结 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 消失。

于 2010-02-13T07:32:12.303 回答
4

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

对于 Dreamhost 问题,您必须按照 Matt 所说的去做。将导轨冻结到 2.3.4。

rake rails:freeze:gems VERSION=2.3.4

Dreamhost 使用预加载机架 1.0.0 的旧版本的 Passenger。预加载机架 1.0.0 后,您将无法加载机架 1.0.1。因此,DH 可能的最新 Rails 版本是 Rails 2.3.4 和 Rack 1.0.0。

于 2009-12-17T08:15:36.053 回答
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 上运行它?

这与缺少的 gem 无关,而是与不匹配的版本需要两次的 gem 有关。rake gems:unpack:dependencies 不能解决这个问题(我试过)。

我怀疑这又是 Dreamhost 的乘客版本的问题。我的服务器(布宜诺斯艾利斯)有乘客 2.2.5。最新的乘客版本是 2.2.7。

于 2009-11-30T07:07:25.510 回答
1

rack 的简单 gem 更新对我不起作用,因为 Rails 2.3.5 似乎特别想要 Rack 1.0.1。因此,当我执行 gem update rack -v=1.0.1 时,Rails 2.3.5 立即启动。

于 2010-03-22T15:27:17.793 回答
1

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

vendor/rails/actionpack/lib/action_controller.rb对我来说,在第 34 行从 to 编辑就gem '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

于 2012-01-25T17:36:35.153 回答
0

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

rake gems:unpack:dependencies

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

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

于 2009-11-29T08:50:33.410 回答
0

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

更新:我的服务器于 2009 年 12 月 24 日升级到 Rack 1.0.1,为我解决了这个问题。如果您的帐户仍然遇到问题,我建议您提供消息支持;在我的情况下,他们反应迅速(通过电子邮件,而不是行动,但对于价格你真的无法拥有一切)。

于 2009-12-11T15:14:17.733 回答
0

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

我想这可以解决它。

于 2009-12-18T00:05:53.963 回答
0

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

于 2009-12-22T16:22:31.607 回答