2017-08-22 3 views
1

これはActiveRecord、PostgreSQL、Flynn、または私のアプリケーションに問題があるのか​​どうかはわかりませんが、最近私は新しいフィールドflynn_process_settings、私のアプリケーション内のテーブルにenvironmentsと呼ばれ、Environ#update要求がflynn_process_settingsの新しい値を含む更新された環境の内容で200のステータスを返すのに対し、何らかの理由でデータベースに送られるUPDATE SQL文はflynn_process_settingsが含まれます。ActiveRecordは、(Flynn環境で)UPDATEクエリから新しく作成されたフィールドを外しています

「データベースは移行されましたか?」というような通常の容疑者を除外したような気がします。実のところレールコンソールを開き、それをうまく更新できて、ほとんどのようです物事は意図どおりに設定されています。

ここには本当に変わった部分があります。同じ更新要求を何度も繰り返し送信すれば、20〜30回に1回程度働きます。要求の間に1分または2秒待つかどうかは重要ではないようです。それは常に成功の約5%のチャンスです。

コンテキスト:このアプリケーションは、Postgresを使用してFlynnコンテナ環境で実行しています。私は最近、ステージングで同じ問題が発生した後に、プロダクションへのアップデートを導入しました。これは、Flynnに数回以上プッシュすることで修正できました。だから、ある種のFlynn問題かもしれないが、私はこの種の問題を引き起こす可能性があると想像することはできない...?

最新のリリースで実行されている2つのレールプロセスのインスタンスがあります。失敗/成功は特定のものに対応していないようです(私のクライアントが特定のインスタンスに縛られるように設定されているようです)。

UPDATE:パラメータのハッシュは、それが実際に動作要求に自動的に包まれたパラメータ"environment" => { "flynn_process_settings" => "..." }が含まれているので、これは、パラメータ解析/ラッピングに問題がある可能性があるように見えます!フリンが(何らかの形でアプリケーションを実行している古いアプリのプロセスを残しているように見えます:

def update 
    if environment.update(environment_params) 
    render ... 
    else 
    render ... 
    end 
end 

def environment_params 
    setup_step_keys = [An Array] 
    params.permit(setup_step_keys + [:flynn_process_settings]) #This should be at the root of params, right? 
end 

UPDATE 2:パラメータにアクセスして、私のコードは次のようになりますので、そのネストされたパラメータは、必要とされるであろう、なぜ私はわからないが、 141)、のうち、(これは驚くことではありませんが、私はまだ200ステータスを返す方法についてはまだ混乱しています)です。だから今私の主な質問は、Flynnに新しいバージョンのアプリを配備した後、古いバージョンのアプリが動いている理由です。

答えて

0

これは完全に質問に答えることはできませんが、エラーの原因となっていた迷路の旅客プロセスが実行中に残っていることが判明しました。すべての作業結果は、より新しい乗客のプロセスから来ました。したがって、私たちの主な理論は、移行が実行される前に古いプロセスが開始され、例外なく実行され続けていたが、移行が実行された後も何らかの理由でデータベースを更新しないということです。

「組み込みエンジンで実行するとメモリリカバリの問題を引き起こすリファクタリングエラー」が発生したPassenger 5.1.5を使用していましたが、その可能性はわかりませんが。

いずれの場合でも、主な問題は、エラー動作を引き起こす不正な乗客プロセスがあり、そのプロセスを強制終了して問題を解決したことでした。なぜこのプロセスが開始されたのか、例外が発生しなかったのかどうかについてはまだ言いませんので、誰かが完全な説明をしている場合に備えて、さらに回答を残しておきます。