Mat*_*hew 8 rack rubygems ruby-on-rails 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"
Run Code Online (Sandbox Code Playgroud)
我明白了:
can't activate rack (~> 1.0.1, runtime) for [], already activated rack-1.0.0 for []
Run Code Online (Sandbox Code Playgroud)
所以我真正需要做的是绕过我的应用程序使用1.0.1的请求,并使用Dreamhost的1.0.0.有谁知道如何配置这个?它甚至可能吗?谢谢您的帮助.
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必须注释掉,并添加以下内容从供应商/宝石加载机架
Run Code Online (Sandbox Code Playgroud)load "#{RAILS_ROOT}/vendor/gems/rack-1.0.1/lib/rack.rb"
最终结果应如下所示:
Run Code Online (Sandbox Code Playgroud)#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消失.
您几乎总是希望将应用程序所依赖的 gem 解压到vendor
文件夹中。您可以使用以下rake
命令来做到这一点:
rake gems:unpack:dependencies
Run Code Online (Sandbox Code Playgroud)
这将在应用程序的根文件夹下创建一个文件夹vendor/gems
,并将使用命令声明的所有 gem 解压config.gem
到其中。
这不仅可以解决版本不匹配的问题rack
,还可以确保您在生产中使用的 gem 版本与在开发中使用的 gem 版本完全相同,这可以防止将来出现许多潜在的麻烦。
归档时间: |
|
查看次数: |
16192 次 |
最近记录: |