我有一个非常简单的 Rails 应用程序,它的某些功能是基于 ajax 的。当我在开发环境中使用它时,一切都按预期运行。但是,在生产环境中发生了一些奇怪的事情:当进行 ajax 调用时,呈现的是 HTML(基于 HAML)布局而不是 js(基于咖啡)。
在比较来自生产和开发的日志时,很明显我在处理响应的方式上做错了,但我一直在摸不着头脑好几个小时了。
假设我的请求是:/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 输出的错误输出可能是什么问题?
编辑:也许我错过了一些相当简单的东西。我仍然无法从我的生产环境中实现开发中的工作。我正在使用 ruby 1.9.3 和 Rails 3.2.6,以及 jQuery / jQuery-ujs。基本上,我会改进我的问题:当使 link_to remote: true 时,我如何强制服务器用 javascript 文件回答我(并在 respond_to.js 块而不是 html 块上分支)?