2009-04-05 13 views
2

environment.rbにスレッドオブジェクトを作成し、それを他のコントローラの動作に使用したいと思っています。RoRのenvironment.rbで定義された変数にアクセスする方法は?

私はそれをどのようにすればよいですか?

ありがとうございます。


は実は、私は三つのプロセスは、いくつかのデータをフェッチし、データベースに格納されて永久に実行していることにしたいです。だから私はスレッドを使用しています。そうする他の方法はありますか?

答えて

0

これには十分注意してください。私の知る限りでは、レールはスレッドセーフではありません。そして、すべての魔法(私の言葉で「メタプログラミング」)に直面してスレッドを安全に使用しようとすると、すべての人が逃げてしまうので、危険に思えます。

どうしてスレッドオブジェクトが必要なのですか?

railsはスレッドセーフmight not mean as much as you thinkと言っています。私は確かに私が必要としなかった場合にそれを数えるのは心配です。

+0

Railsは2.2以降でスレッドセーフです。 –

3

最初の質問に答えるために、environment.rbで宣言された定数は、コードベース全体で使用できます。あなたがそうすることはできませんが、そうすることは避けてください。これは設定スパゲッティにかなり早くなることができます。

もっと広く言えば、Railsはバージョン2.2からスレッドセーフではありますが、スレッドはまだまだ珍しいです(特にMRIでは並行操作を提供する方法として、特にMRIのグリーンスレッドは特にそうではありません)。役に立ったStarlingのようなメッセージキューを使用して、他のRubyプロセスをスピンアップして非同期処理を実行することを検討してください。

+0

スレッドセーフであると言う人もいます。私は、少なくともこの意味ではないでしょう。コーナーケースが多すぎます。 – MarkusQ

0

さらに、ブライアンの言うところでは、イニシャライザ(設定/初期化子を実行させる)を使用することを検討してください。私はそれがenvironment.rbを使うよりもはっきりしていると思う。

関連する問題