2

ActiveRecord によってバックアップされる新しい Rails アプリにconfigatron gemを使用しています。configatron 設定の一部はファイルに設定され、一部は DB から取得されます。これらは時々変更されるため、ここに私の configatron.rb からの 2 行を示します。

configatron.app.uptime.start = Time.now
configatron.email.signature = Setting.where(:keyname => "email_signature").first.value.to_s unless Setting.where(:keyname => "email_signature").first.nil?

このアプリは複数のメーラーから複数の電子メールを送信するため、このグローバル構成を 1 か所に保持するのに適した方法であり、さらに署名のデータベース ルックアップが削減されます。何らかの理由でサイト管理者が変更を決定した場合、設定テーブルを更新する Web 管理インターフェイスを介して変更できます (設定モデルに関連付けられています)。

これはすべて楽しくて良いことですが、configatron.rb を保存するのに最適な場所はどこですか? 現在、それは私のイニシャライザフォルダにあります。つまり、アプリケーションの起動時に一度ロードされることを意味します - これは良いことですが、設定の 1 つが変更された場合、サイト管理者は電子メールの署名を微調整して、新しいプロモーション Web サイトに言及することを決定します - 変更を有効にするために - 再起動する必要がありますアプリ(パッセンジャーを実行しているため、コードから実行するのは簡単touch tmp/restart.txtです)。ただし、これは、リセットしない他の構成設定 (アップタイム開始タイムスタンプなど) もリセットされることを意味します。

configatron.rb とロードを移動して、起動時に一度ロードし、アプリを再起動せずにいくつかの構成を変更できるようにするのに適した場所は何ですか?

ありがとう。

4

2 に答える 2

1

イニシャライザに入れるのが適切な場所だと思います。

アプリケーションを再起動せずに構成を更新する場合は、通常、「ウォッチドッグ」をセットアップします。データベースを定期的にプルして構成の更新をチェックするプロセス。変更された構成をアプリにプッシュする何らかの種類のコールバックを実装することもできます。

于 2012-07-12T17:14:44.660 に答える
1

configatron をイニシャライザに入れると、configatron 設定を読み込む前に Rails 環境変数が読み込まれます。その結果、Rails 構成 (config/environments/production.rb) にロードされたミドルウェアは configatron 変数を使用できませんでした。

そのため、代わりにenvironment.rbの最初のものとしてロードすることになりました

于 2014-09-30T11:38:53.983 に答える