質問

現在、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 を使用することです。誰かこれを設定する方法を知っていますか?それは可能ですか?助けてくれてありがとう。

役に立ちましたか?

解決

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

rake gems:unpack:dependencies

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

これは、 rack のバージョンの不一致に関する問題を解決するだけでなく、開発で使用しているのと同じバージョンのgemを本番で使用していることを確認します。将来の頭痛。

他のヒント

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をロードできないという問題が乗客から発生します。

     

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

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 2.3.4およびRack 1.0.0です。

2.3.5にアップグレードしようとしたときに同じ問題が発生しました。

Rails 2.2.2をまだ実行しているサーバーがあるのだろうか?ドリームホストは今ではみんなを2.3.4に動かしていると思った。 3か月前に彼らに不平を言い、翌日、私のサーバーでPassengerをアップグレードしたので、現在のRailsバージョンをインストールできました。したがって、Rails 2.3.5がアプリに不可欠な場合は、サポートチケットを提出することをお勧めします。ただし、2.3.4と2.3.5の間にはあまり変更がなかったため、2.3.4でもアプリが実行される可能性があります。ベンダーの2.3.4で実行してみましたか?

これはGemが見つからないということではなく、バージョンが一致しないために2回必要とされるGemに関するものです。 rake gems:unpack:dependenciesはそれを修正しません(私は試しました)。

また、DreamhostのPassengerバージョンの問題だと思います。私のサーバー(buenosaires)にはPassenger 2.2.5があります。乗客の最新バージョンは2.2.7です。

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

どうやらRacksがラック1.0.1を必要とするこの全体は、actionpackの小さな依存要件バグであり、かなり簡単に解決できます。

私にとっては、 gem 'rack'、 '〜>から34行目の vendor / rails / actionpack / lib / action_controller.rb を編集するだけで十分でした。 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

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

それで解決すると思います。

現時点では、すべてをフリーズ解除して、ドリームホストにあるものを使用するのが最善だと思います。現在、レール2.3.4があり、1日か2日待つことができれば-dreamhostはレールのgemを2.3.5にアップグレードしています(12月21日に昨日既にアップグレードされているはずですが-何らかの理由で説明されていません)まだ2.3.4)。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top