2

ユーザーが管理フロントエンド インターフェイスを介して database.yml の内容を変更できるようにするシステムを構築しています。

database.yml への変更は、アプリケーションが再起動されるまで明らかに影響しません。ユーザー (物理的なボックスへの SSH アクセスを持っていない可能性があります) にアプリケーションを手動で再起動させるのではなく、ActiveRecord に起動後の構成を強制的に再読み込みさせる方法が必要です。

サーバーの再起動を要求するのではなく、最初の起動後に ActiveRecord を強制的に再初期化する方法はありますか?

根拠

これには 2 つの使用例があります - a) 初期セットアップ ウィザード b) sqlite 評価データベースから本番サポート データベースへの移行。

初期設定ウィザード

アプリケーションをインストールして初めて起動すると、セットアップ ウィザードが表示されます。これにより、sqlite を使用して組み込みの評価データベースを選択するか、本番環境でサポートされているデータベースを指定することができます。データベースのプロパティを指定する必要があります。ymlユーザーにサーバー上のファイルを編集するように求めるのではなく、初期設定時にフロントエンドで編集できるようにする必要があります。

sqlite 評価データベースから本番対応データベースへの移行

ユーザーが組み込みの評価データベースを使用することを選択したが、alter が実稼働データベースに移行したい場合、この変更を反映するためにデータベース設定を更新する必要があります。上記と同じ理由で、ユーザーが構成ファイルを編集する必要があるのではなく、フロント エンドが必要です。特に、ユーザーがアプリケーションを起動しようとしたときに機能しないことをユーザーが発見するのではなく、アプリケーションから接続やアクセス許可などを検証できるためです。それらはアクティブレコードの例外を受け取ります。

4

3 に答える 3

1

サーバーにアクセスできる場合と同じように、次のリクエストでRailsスタックを再起動します。

system("touch #{File.join(Rails.root,'tmp','restart.txt')")
于 2013-01-19T05:31:26.923 に答える
0

理論的には、次の方法でこれを実現できます。

config = YAML::load File.read(File.join(Rails.root, "config/database.yml"))

ActiveRecord::Base.establish_connection config[Rails.env]

再接続コードを有効にするには、実行中のすべての Rails プロセスで再接続コードを実行する必要があります。ただし、ここで心配すべき危険なことがたくさんあります。データベース構成を変更するときの競合状態、新しい database.yml の構文の問題などです。

于 2013-01-18T23:55:51.123 に答える