私はその機能のいくつかのためにajaxベースである非常に単純なrailsアプリケーションを持っています。開発環境から使用している場合、すべてが期待どおりに実行されます。ただし、本番環境では奇妙なことが起こります。ajax呼び出しが行われると、js(コーヒーベース)ではなくHTML(HAMLベース)レイアウトがレンダリングされます。
本番環境と開発環境のログを比較すると、応答の処理方法に問題があることは明らかですが、手がかりがないまま何時間も頭を悩ませてきました。
私のリクエストが次のようになっているとしましょう:/software_tags/1/edit.js開発ログで、私は見ることができます(そして出力は正しいです、私は期待されるjavascriptページを取得します):
Started GET "/software_tags/1/edit.js" for 127.0.0.1 at 2012-07-17 16:59:34 -0700
Processing by SoftwareTagsController#edit as JS
Parameters: {"id"=>"1"}
Rendered shared/_error_messages.haml (0.1ms)
Rendered software_tags/_form.haml (4.5ms)
Rendered software_tags/edit.js.coffee (5.7ms) <---- THIS IS GOOD!
Completed 200 OK in 10ms (Views: 8.1ms | ActiveRecord: 0.4ms)
ただし、開発ログには次のように表示されます(出力が間違っていると、HTMLページが表示されます)。
Started GET "/software_tags/1/edit.js" for x.x.x.x at 2012-07-18 01:59:54 +0200
Processing by SoftwareTagsController#edit as JS <--- Wouldn't that force the edit.js.coffee to be rendered instead of the edit.haml?
Parameters: {"id"=>"1"}
Rendered shared/_error_messages.haml (0.1ms)
Rendered software_tags/_form.haml (2.8ms)
Rendered software_tags/edit.haml (3.2ms) <---- THIS IS WRONG!
Completed 200 OK in 5ms (Views: 3.5ms | ActiveRecord: 0.5ms)
私のコントローラーでは、編集アクションは次のようになります。
def edit
respond_to do |format|
format.js
format.html
format.json { render json: @software_tag }
end
end
ただし、jsonデータにアクセスしようとすると、すべての環境ですべてが正常に機能するため、js出力の出力が間違っている場合の問題は何でしょうか。
編集:たぶん私はかなり単純なものが欠けています。私はまだ、本番環境から開発で機能していることを達成することができません。Rails3.2.6でruby1.9.3を、jQuery/jQuery-ujsとともに使用しています。基本的に、私は私の質問を洗練します:link_to remote:trueを作成するとき、サーバーにjavascriptファイル(およびhtmlファイルの代わりにrespond_to.jsブロックで分岐)で応答するように強制するにはどうすればよいですか?