8

私は現在、Rails2.3.5アプリを実行しようとしているDreamhostを使用しています。

これが状況です。DreamhostのサーバーにはRails2.2.2がインストールされています。もちろん、共有ホストのRailsバージョンを更新することはできないので、ベンダーでRailsを凍結しました。Rails 2.3.5には、ラックv1.0.1gemが必要です。Dreamhostはラックv1.0.0gemを使用します。だから私が定義しようとすると:

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 を使用すると、Rack 1.0 が既にアクティブ化されているため、Rack 1.0.1 をロードできないという Passenger からの問題が発生します。

これを解決する 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 をコメントアウトし、ベンダー/gems からラックをロードするために次を追加する必要があります

   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 をロードする必要があると思います。

于 2010-02-13T07:32:12.303 に答える
4

rake gems:unpack:dependenciesrakeを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は、Rails2.3.4およびRack1.0.0です。

于 2009-12-17T08:15:36.053 に答える
1

どうやら、Railsがラック1.0.1を必要としているこのすべては、アクションパックの小さな依存関係要件のバグであり、かなり簡単に解決できます。

私にとってはvendor/rails/actionpack/lib/action_controller.rb、34行目からから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 に答える
1

Rails2.3.5ではRack1.0.1が特に必要なようであるため、rackの単純なgemアップデートは機能しませんでした。したがって、gem update Rack -v = 1.0.1を実行すると、Rails2.3.5がすぐに起動しました。

于 2010-03-22T15:27:17.793 に答える
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 でも同じように動作する可能性があります。ベンダーの 2.3.4 で実行してみましたか?

これは欠落している宝石に関するものではなく、不一致のバージョンで 2 回必要とされている宝石に関するものです。rake gems:unpack:dependencies はそれを修正しません(試しました)。

Dreamhost の Passenger バージョンに問題があるのではないかと思います。私のサーバー (buenosaires) には Passenger 2.2.5 があります。Passenger の最新バージョンは 2.2.7 です。

于 2009-11-30T07:07:25.510 に答える
0

DreamhostはRackandRailsを更新しています:http ://www.dreamhoststatus.com/2009/12/21/ruby-gem-updates/

私はそれがそれを解決すると思います。

于 2009-12-18T00:05:53.963 に答える
0

FWIW、宝石を凍結しても問題が解決しないことを確認できます。実際、デプロイが爆発する前に (DH の Rack 0.3.0 を使用して何とか!)、スピンアップが爆発し、上記と同じエラーが発生しました。何か仕事をやりたいのであれば、いよいよおもちゃ/概念実証アプリを「実際の」ホスティングに移行する時が来たのかもしれません。

更新: 私のサーバーは 2009 年 12 月 24 日に Rack 1.0.1 にアップグレードされ、問題は解決しました。アカウントでまだ問題が発生している場合は、サポートにメッセージを送ることをお勧めします。私の場合、彼らはかなり反応が良かったです(アクションではなくメールで、しかし価格のためにあなたは本当にすべてを手に入れることはできません).

于 2009-12-11T15:14:17.733 に答える
0

ほとんどの場合、アプリケーションが依存する gem をvendorフォルダーに解凍する必要があります。次のコマンドでそれを行うことができますrake

rake gems:unpack:dependencies

これにより、アプリケーションのルート フォルダーの下にフォルダーが作成され、コマンドvendor/gemsで宣言したすべての gem がそのフォルダーに展開されます。config.gem

これにより、バージョンの不一致の問題が解決されるだけでなくrack、開発で使用しているのとまったく同じバージョンの gem を本番環境で使用していることを確認できます。これにより、将来の多くの潜在的な頭痛の種を防ぐことができます。

于 2009-11-29T08:50:33.410 に答える