此问题与Why do I get “no route matches” for requests to the asset pipeline?类似。Rails 3.1,资产管道:无路由匹配
我有一个rails 3.0应用程序,我升级到3.1并转换为使用新的资产管道(感谢RailsCasts #282和#279)。
在生产模式下,我看到应用程序 - <摘要> .js和应用程序 - <摘要> .css。大!如果我查看这些文件的来源,我会看到它们被压缩。绮山楂!这意味着资产管道正在运行,对吗?
但是,如果我将?debug_assets=1
添加到URL以便我可以查看单个文件,其中一些文件正在生成ActionController::RoutingError (No route matches [GET] "/assets/<filename>-<digest>.js")
,对于某些CSS文件也是如此。但不是全部,只是一些,我不知道是什么让一些文件做到了这一点,有些则没有。
我清除了tmp/cache/*并重新启动Passenger。我碰过config.assets.version
。我已经重启了memcached。这些似乎都没有解决它。但奇怪的是,这只有当我在URL中使用?debug_assets=1
时才会出现;没有它,我只看到一个JS和CSS文件,全部压缩和缩小。顺便说一句,我不使用预编译的资产。但只是为了咧嘴笑,我执行了一个rake assets:precompiled
,并且whaddya知道? ?debug_assets=1
现在显示所有JS和CSS文件,并且它们都不是404。
所以我想你可能的问题是,“为什么不只是使用预编译的资产,而不用担心从延迟加载丢失的资产?好点。答:我只是想确保我明白我在做什么,发生了什么,并且我正确地做着事情。
application.rb中:
config.assets.enabled = true
config.assets.version = '1.2'
production.rb:
config.assets.compress = true
config.assets.compile = true
config.assets.digest = true
config.assets.js_compressor = :uglifier
config.assets.css_compressor = :scss
development.rb:
config.assets.compress = false
# I keep this off during development because I want
# to make sure the compression isn't breaking my JS
config.assets.debug = false
那么,我已经使用预编译资产数月。这是要走的路。 –