Rails 3.1在生产环境中未预编译某些资产

6
我在Heroku上遇到了问题,显示我的“places.js”未经预编译,即使我正在运行cedar堆栈,并且在slug编译期间正在运行rake precompile任务。因此,我尝试使用rake assets:precompile RAILS_ENV = production本地运行它,的确rails没有预编译我的/app/assets/javascripts/places.js.coffee.erb资产。
我的production.rb使用默认的rails 3.1配置,我甚至尝试从资产中删除.erb,但无济于事。
我还认为,由于我的places.js.coffee.erb资产未包含在sprockets清单中(我在应用程序中手动包含它),也许它只能预编译清单中的资产。将其包含在清单中也不起作用。
只有我的application.js.coffee和`application.css正在预编译(带或不带摘要)。
我唯一发现的问题可能是使用匹配资产的较差的正则表达式,但默认值为(?:\/|\\|\A)application\.(css|js)$不匹配我的资产,因此应该被包括。
我不确定从这里如何进行故障排除。 一切都很默认。您对此有什么想法吗?
3个回答

10

首先,如果您希望在没有清单的情况下编译文件,则需要将其添加到预编译配置选项中:

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

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


是否可以直接将文件添加到清单中呢? - David Rhoden
是的,如果您想要将所有代码包含在application.js中。这种情况是当您想直接引用文件中的代码时。当一个页面有很多代码不需要用于站点的其他部分时,通常会这样做。 - Richard Hulse

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'

1
虽然以上解决方案看起来不错,但我想知道为什么要这样做?
和其他人一样,在生产环境中,我遇到了错误,指出我新添加的javascript文件没有预编译。但是,我在Rails在我的生产服务器上生成的minified application.css文件中找到了它的代码。
问题在于,在开发过程中,我认为我需要添加一个`javascript_include_tag`帮助程序来加载我的新javascript文件。添加该帮助程序是我特定错误的源头。我只需将其删除,所有内容都可以在开发和生产环境中正常工作。
所以,我建议您查找您的minified application.js中新.js文件的迹象,并像上面的解决方案建议的那样不要修改任何其他文件。如果必要,请指出我的错误。 ;)

我认为这些适用于您不想使用所有已编译文件的情况,例如在您不调用<%-#= javascript_include_tag "application" %>因为您没有使用application.html.erb的情况下。 - botbot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接