rails 3.1一些资产未在生产时进行预编译

时间:2011-11-17 06:23:02

标签: ruby-on-rails-3.1 asset-pipeline

我遇到Heroku的问题显示我的'places.js'没有预编译,即使我在雪松堆栈上运行,并且在slug编译期间它正在运行rake预编译任务。所以我尝试使用rake assets:precompile RAILS_ENV=production在本地运行它,确实rails并没有预编译我的/app/assets/javascripts/places.js.coffee.erb资产。

我的production.rb正在使用默认的rails 3.1配置,我甚至尝试从资产中删除.erb,但无济于事。

我还想过,因为我的places.js.coffee.erb资产没有包含在链接清单中(我手动将它包含在我的应用程序中),也许它只预编译清单中的资产。在清单中要求它也不起作用。

只有我的application.js.coffee和`application.css正在预编译(有和没有摘要)。

我发现的唯一问题可能是用于匹配资产的正则表达式较差,但默认值(?:\/|\\|\A)application\.(css|js)$与我的资产不匹配,因此应将其包括在内。

我不确定如何从这里排除故障。一切都是默认的。关于这里可能发生什么的任何想法?

3 个答案:

答案 0 :(得分:10)

首先,如果您希望文件在不在清单中时进行编译,则需要将其添加到预编译配置选项中:

config.assets.precompile += ['places.js']

其次,您可以编辑您的问题以包含您的清单 - 这可能是语法问题。如果我能看到问题所在,我会编辑这个答案。

答案 1 :(得分:4)

我有同样的问题,并解决了这个问题:

# add new file /app/assets/javascripts/places_manifest.js
//= require places

# add a line to config/application.rb
config.assets.precompile += ['places_manifest.js']

# in your views include places_manifest, not places
javascript_include_tag 'places_manifest'

答案 2 :(得分:1)

虽然上述解决方案似乎很好,但我想知道为什么要这样做?

和其他人一样,我在生产中遇到错误,说明我新添加的javascript文件没有预编译。但是,我发现它是在我的生产服务器上生成的缩小的application.css文件中的代码。

问题在于,在开发时,我认为我需要添加javascript_include_tag帮助程序来加载我的新javascript文件。添加该帮助器是我特定错误的根源。我刚删除它,在开发和生产环境中一切正常。

所以我的建议是在你的缩小的application.js中查找你的新.js文件的迹象,并且不要修改上述解决方案建议的任何其他文件。如有必要,请以我的方式指出错误;)