【发布时间】:2011-12-03 04:03:50
【问题描述】:
这个问题类似于Why do I get “no route matches” for requests to the asset pipeline?。
我有一个 rails 3.0 应用程序,我升级到 3.1 并转换为使用新的资产管道(感谢 RailsCasts #282 和 #279)。
在生产模式下,我看到了 application-
但是,如果我将 ?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,你知道吗? ?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
【问题讨论】:
-
好吧,我已经使用预编译资产几个月了。这是要走的路。
标签: ruby-on-rails asset-pipeline