2011-08-16 2 views
2

私は通常、-rパラメータを使って起動されるPerl Catalystアプリケーションを持っています。 私は行動の2種類に気づいた:Catalystアプリケーションの再起動のメカニズムにはどのような要素が影響しますか?

1)コードのすべての「ダミーの変更」で、通常はアプリケーションの再起動(「ダミーの変化」によって、私はこのようになめらか、スペースを追加または1つを欠失さ)

2)アプリケーション(同じ「ダミーの変更」)を再起動しない、「サーバーを再起動しようとすると、」テキストが表示され、アプリが残って

(私は に手動にそれを殺す持っている)、この状態でブロックされています

動作は実際のコードによって異なります。ある行動がどの瞬間に作用するかに影響するコードに関連するものがあるようです。動作は一定です。つまり、同じコードの動作が2つの一定の動作を1つ持っています。
アプリケーション自体は、エラーや警告なしで正常に動作しているようです。

どのようにコードがこの動作に影響を与える可能性がありますか? (私は一般的に意味する) どのような要因が再起動のメカニズムに関連していますか?

答えて

0

PSGI(つまりplackup -r)経由でスタンドアロンサーバーを使用すると、サーバーが一度再起動し、その後のコード変更によってメッセージは生成されますが、再起動はされません。

しかし、組み込みサーバーmyapp_server.pl -rは、このように動作することはありません。 perlモジュールやYAMLファイルなどを変更すると、再起動が正常に開始されます。

this discussion of Plack and restartを回したときの私はそれについて簡単に研究しました。

+0

それができますDB接続に関連するもの。さらなる実験では、アプリケーションがアクセスされた場合(ブラウザなどから)は再起動しないことが明らかになりました。私は、アプリケーションを実行し続けるDBへの何らかの種類のオープンな接続があるかもしれないと思うし、彼らはそれをnoramllyで再起動させない。私はCatalyst :: Model :: DBIを使用しています。何か案は? – ArtM

+0

MySQL、Informix、またはSQLiteで書かれたCatアプリケーションでは見られませんでしたが、それは可能です。リクエストサイクルの終わりにデータベースから切断すると(テンプレートがデータベースにアクセスする場合、RenderViewをエンドハンドラから分離する必要があります)、動作が変わりますか? – RET

+0

* end *ハンドラに明示的な* disconnect *を追加しました(RenderViewは別のサブに移動され、* forward *が使用されます)。今度はDBハンドラがリクエストごとに切断されます(これを見るにはDBIモデルでデバッグメッセージを追加してください)。動作は変更されません。これが役に立ったら、私はOracleを使っています。 – ArtM

1

これは、新しいバージョンのOracleクライアントで信号処理が変更されたためです。デフォルトのシグナルハンドラを復元するには、 "ora_connect_with_default_signals"オプションを使用します。ここで

あなたはDBIx ::クラスモデル(のMyApp ::モデル:: DB)でそれを行うことができる方法である。

connect_info => [ 
    'dbi:Oracle:mydb', 
    'username', 
    'password', 
    { 
     ora_connect_with_default_signals => [ 'INT' ], 
    }, 
], 

や設定ファイルで:

<Model DBIC> 
    connect_info dbi:Oracle:mydb 
    connect_info username 
    connect_info password 
    <connect_info> 
     ora_connect_with_default_signals [ INT ] 
    </connect_info> 
</Model> 
関連する問題