0

私は Hartl の Ruby on Rails チュートリアルに取り組んでおり、開発環境とテスト環境の操作方法の違いに関連する問題に遭遇しました。

簡単に言えば、2 つの環境は同期していません。開発環境は正常に動作しているように見えますが、行われている変更の一部がテスト環境に反映されていません。

たとえば、application.html.erb を編集すると、その変更がテスト環境に複製されます。ただし、_header.html.erb を変更しても変更されません。これが問題に気付いた方法です-ヘッダーへの新しいリンクの存在のテストが失敗していましたが、ブラウザーで(開発環境で)それらを見つめていました。

これを理解しようとしているときに気付いた別の癖があります: を使用してテスト環境でローカル サーバーを実行rails server --environment testし、ブラウザーを起動すると、アプリケーションは「修正された」ままになります。つまり、アプリケーション コードや HTML/CSS ファイルに加えられた変更は、ブラウザーに複製されません。変更を確認するには、ローカル サーバーを閉じてから再度開く必要があります。次に、変更を表示可能な状態でテスト環境をロードします。

2 つの環境の db は同一です (チュートリアル全体で移行を実行rake db:migrateして追加し、sqlite 3 ビューアーを介して db が同一であることを確認しました)。rake db:test:prepare

この問題は、私の Rails 環境に対する初歩的な誤解が原因であると思います。助けていただければ幸いです。

完全を期すために、この問題に最初に気付いたときは、第 8 章 (サインイン/サインアウト認証の追加) まで作業しています。

4

2 に答える 2

2

通常、本番環境の Rails は静的ファイル (HTML や CSS など) を提供しません。

 config.serve_static_assets = true

しかし、本番環境を実行する場合は、Apache や NginX などの Web サーバーで実行する必要があり、この場合、それらは静的ファイルの提供を担当します。

于 2013-01-30T08:12:59.060 に答える
0

環境ごとに異なる動作があることに注意してください。ブラウザのリクエストごとに開発環境のみがアプリをリロードします。テスト環境と本番環境は、基本的にすべてをアプリ ディレクトリにキャッシュします (この SO の回答を参照してください) 。基本的に、サーバーの起動時のコードのバージョンのみを記憶します。これは、パフォーマンスのために、および/またはボラティリティを減らすために行われます。パフォーマンスは理にかなっていますが、ボラティリティについてはもう少し説明が必要かもしれません。

テストの実行とコードの編集を同時に行っているとします。テストは、テストを実行する直前のバージョンのコードを実行し、後で行った変更は実行しません。テスト中にアセットをリロードすることは、時速 60 km で高速道路を走っている車を分解するようなものです。分解するものによっては、意図しない結果が生じる可能性があります。おそらく壊滅的ではありませんが、少なくともテストの実行を危険にさらす可能性があります.

テストが最新バージョンのコードに対して実行されていないためにテストが失敗することが問題である場合、キャッシュの問題が発生している可能性があります。特に、Hartl の Rails チュートリアルで最後に推奨された spork を使用している場合は特にそうです。スポークを再起動する必要があるかもしれません。

于 2013-03-19T02:17:31.690 に答える