今日私は、Railの生産環境と開発環境の違いのために、ひどい問題を経験しました。コードを考えてみましょう:@のsubscription_plan.affiliate私は、クエリがアフィリエイトなしのみのサブスクリプションプランを返すことが期待nillであるかのようRailsの開発環境と本番環境の重要な違いは何ですか?
"select * from subscription_plans where affiliate_id is null or affiliate_id = #{@subscription_plan.affiliate.id rescue 0};"
、0のIDを持つ任意の関連会社があってはなりません。 nil.idがエラーをスローするため、開発環境でうまくいきます(それについてのメッセージが間違って4になることを前提としています)。問題は、私はそのコードを私のプロダクションサーバーとサブスクリプションプランに、affiliate_idが4で全部表示された状態で公開しました。プロダクションでは、nil.idはエラーを投げず、むしろ単純に4を返します。さあ、ありがとう。
Railsの開発者は他に何を知っておくべきですか?特に、潜在的に問題を引き起こす可能性のある環境間の相違点はありますか?
ありがとう:
が次にあなたのような何かを行うことができます...
使用法:
最後は、あなたのコードは、ActiveRecordのをより有効に活用するためにリファクタリングする必要があります、 いいアドバイス! – tybro0103ええ、これは私の実際のコードではありませんでした。私は可能な限り簡単に同じnil.id問題を再現した行を書き込もうとしました。 – tybro0103
ああ、良い:)あなたは@ Beerlingtonのモデル設定の提案に従っていることを望みます。 FWIW私は彼がどんな無礼を意図したとは思わないし、彼のアドバイスは悪くない。 –