为什么我的rails应用程序在生产环境中没有正确响应.js格式
Why is my rails application not responding properly to the .js format in production environement?
我有一个非常简单的rails应用程序,它的一些功能是基于ajax的。当我在开发环境中使用它时,一切都按预期运行。然而,在生产环境中会发生一些奇怪的事情:当进行ajax调用时,呈现的是HTML(基于HAML)布局,而不是js(基于Coffee)布局。
当比较生产和开发的日志时,很明显我在处理响应的方式上做错了什么,但我已经挠头好几个小时了,没有任何线索。
假设我的请求是:/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输出的错误输出会有什么问题呢?
编辑:也许我错过了一些相当简单的东西。我仍然无法在我的生产环境中实现正在进行的开发。我使用的是带有Rails 3.2.6的ruby 1.9.3,以及jQuery/jQuery ujs。基本上,我会完善我的问题:当使link_to-remote:true时,我如何强迫服务器用javascript文件(并在responsd_to.js块而不是html块上分支)回答我?
如果是gem-intered:assets组,则此gem仅用于资产目录(在应用程序、供应商、库中),而不用于视图中。
有三种方法可以很好地工作:
- 将咖啡导轨移出资产
- 在application.rb中取消注释:
# Bundler.require(:default, :assets, Rails.env)
- 使用宝石咖啡视图https://github.com/yury/coffee-views
我终于找到了问题的答案。对我来说,这听起来像是一个bug,或者可能我错过了什么。
我在我的控制器上放了调试消息,如下所示:
def edit
respond_to do |format|
format.js { Rails.logger.info "in JS handler" }
format.html { Rails.logger.info "in HTML handler" }
format.json { render json: @software_tag }
end
end
事实上,调用了正确的操作,但呈现的是文件edit.haml而不是edit.js.coffe,即使在format.js块中也是如此。
我找到的解决方案是将gem"咖啡轨道"从我的gemfile中移出:assets组,如下所示:之前:
group :assets do
gem 'uglifier'
gem 'sass-rails'
gem 'coffee-rails'
end
之后:
gem 'coffee-rails'
group :assets do
gem 'uglifier'
gem 'sass-rails'
end
现在,生产环境中的一切都按预期进行。
谢谢你们的帮助!
您尝试过吗:
respond_to :js, :only => :edit
在控制器的顶部?
或者以与json块相同的方式在format.js块中指定模板渲染。
- 将json响应格式化为父级和子级
- 将服务器响应格式化为人类可读
- RSS提要响应不是以原始XML格式提供的
- 响应出现JSON格式问题
- 如何发布到URL并打开一个新窗口以显示pdf格式的响应
- 为什么我的rails应用程序在生产环境中没有正确响应.js格式
- 来自Mongo的JSON格式的无阻塞写入响应
- jQuery ajax 调用 - jim 脚本响应应该是什么格式
- 从 AJAX 命令返回 JSON 格式的响应
- 强制 Chrome 显示格式为树结构的 Json 响应
- JavaScript JSON 响应格式
- 使用 Jquery 解析 Json 格式的 ajax 响应
- 从aspx页面获取json格式的响应,而不是纯html格式
- Javascript自定义函数,用于将JSON格式的YQL查询响应导入谷歌电子表格
- 以HTML格式操作AJAX响应
- JSONP响应格式错误
- 将当前页面数据存储在一个变量中,其格式/结构与Ajax html响应相同
- 响应格式与rails中的请求不同
- FullCalendar事件JSON提要的响应格式略有不同
- JSON响应格式不正确(angularjs)