我有一个处理AJAX请求的创建操作。在我的开发机器上,成功处理名为create.js.coffee的模板以生成javascript响应。但是,当我部署到Heroku时,应用程序会抱怨它无法找到模板。
ActionView::MissingTemplate (Missing template /expenses/create with {:handlers=>[:erb, :builder], :formats=>[:js, :html], :locale=>[:en, :en]}. Searched in:
* "/app/app/views"
* "/app"
* "/"
):
很明显咖啡处理程序不在那里预处理* .js.coffee模板。
任何人都可以建议我如何配置Heroku来识别和处理这些模板吗?
注意: Heroku已成功预处理资产管道中存在的CoffeeScript文件。
答案 0 :(得分:36)
我参加派对有点晚了,但这是我的解决方案,发布在Github上。
我遇到了create.js.coffee
文件在development
中工作但在production
(在Heroku上)停止工作的问题。日志显示Rails甚至没有找咖啡处理程序:
2011-10-14T08:26:29+00:00 app[web.1]: ActionView::MissingTemplate (Missing template page_blocks/create, application/create with {:handlers=>[:erb, :builder, :haml], :formats=>[:html, :text, :js, :css, :ics, :csv, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json], :locale=>[:nl, :nl]}. Searched in:
2011-10-14T08:26:29+00:00 app[web.1]: * "/app/app/views"
2011-10-14T08:26:29+00:00 app[web.1]: ):
这是我的Gemfile的(重要)部分:
group :assets do
gem "sass-rails", "~> 3.1.0"
gem "coffee-rails", "~> 3.1.0"
gem "uglifier"
gem "compass", "~> 0.12.alpha"
end
# asset templates
gem "jquery-rails"
gem "haml"
只有在我coffee-rails
组之外移动:assets
之后,事情才开始起作用。也许以某种方式在自述文件中明确这一点是个好主意,甚至可能将coffee-rails
插件放在assets
组之外的Rails中发布。
答案 1 :(得分:2)
我甚至稍后参加派对,但我遇到了同样的问题并且有一个简单的解释:
Gemfile中的“assets”宝石组仅用于开发。 Heroku不会在生产中加载这些宝石,因为它依赖于自己的资产管道的稳定版本。
如果您使用的是一个特殊的宝石,它听起来与资产管道相关但实际上并不属于标准管道(例如“coffeebeans”宝石),那么您应该将该宝石保留在“资产”组之外。
我刚刚测试了这个理论,它对我有用。
答案 2 :(得分:0)
在heroku雪松上,您需要根据本页的最后一部分Rails 3.1+ Asset Pipeline on Heroku Cedar向您的路径添加bin。 “如果需要在运行时编译资源,则必须将bin添加到PATH以访问JavaScript运行时。”