8

これがばかげた質問のように聞こえる場合は申し訳ありません。これは「当たり前のこと」の1つであるように思われるためですが、Railsが独自のサーバー(Mongrel、WEBrick、mod_railsなど)を必要とし、それができる理由を誰かに説明してもらえますか?単にmod_rubyを使用しますか?

4

3 に答える 3

7

mod_rubyを実行しているすべてのapacheインスタンスは、Rubyインタープリターを共有します。つまり、共有ホストや、マシンごとに複数のRailsアプリケーションが実行されている環境ではまったく使用できません。1台のマシンで同じアプリケーションの複数のコピーを実行することは可能かもしれませんが、バグを追跡するのが難しいことも簡単に経験できます。レールはシングルスレッドであるため、マシンごとに1つのルビープロセスのみを実行することは考えられないことです。

また、それはそれほどうまく機能しません。

より詳細な議論については、このPhusion従業員のブログをチェックしてください。

于 2009-05-21T23:52:35.460 に答える
7

mod_rubyは共有Rubyインタープリターになるとすでに回答されていますが、これが特に問題となる理由は、クラスが互いに踏みにじることを意味するためです。たとえば、特定のデータベースへの接続を定義するActiveRecord::Baseについて考えてみます。このクラスの状態はRailsアプリケーションごとに異なるため、同じインタープリターで複数のRailsアプリケーションを実行するとすぐに、深刻な階級闘争が発生します。

別の回答では、Railsはシングルスレッドであると述べられていますが、これはRails2.2.2の時点では必ずしも当てはまりません。私はこれをその答えへのコメントとして残しておきますが、私はカルマ拘束衣を着ています:)

于 2009-05-22T02:49:41.890 に答える
2

「mod_rubyはApacheプロセスごとに1つのインタープリターを使用します。つまり、アプリは名前空間内を相互に移動します。少なくともRailsの場合、これは受け入れられないため、mod_rubyが必要な場合はApacheセットアップごとに1つのアプリになります。」-デイヴィッド・ハイネマイヤー・ハンソン

いくつかのことを嘲笑されたので、それでも使用したい場合は、mod_rubyFAQをチェックしてください

Dreamhostは、この取り組みの結論に関するブログから、ホスティング環境にルビーを含めようとしました。

于 2009-05-22T00:01:50.043 に答える