これは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に新しいバージョンのアプリを配備した後、古いバージョンのアプリが動いている理由です。