2012-03-14 40 views
17

在生产模式下,rails似乎无法从资产管道中找到任何预编译的资产。为什么Rails不能找到我的资产?

我在CentOS上的RVM内部使用rails 3.2.0和ruby 1.9.3。没有额外的网络服务器与此应用程序结合运行。该应用程序最近才更新为使用资产管道,因为它最初是一个rails 3.0应用程序。

运行

rake assets:clean 
rake assets:precompile 

后,我看到在公共/资产散列的内容,如我期望的那样。文件末尾的哈希符合我在页面源代码中看到的哈希。

然而在运行时,这是我看到每个资产Rails的尝试投放:

Started GET "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" for 75.149.58.169 at 2012-03-14 11:42:43 -0700 

ActionController::RoutingError (No route matches [GET] "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"): 

我不是指每个资产安置在该文件夹;资产的所有引用看起来像这些:在production.rb

//css: 
.class { 
    background: url(asset.png) no-repeat; 
} 

//erb: 
<%= image_tag "asset.png" %> 
<%= link_to "page", :class => "class" %> 

资产管道相关的设置:

config.serve_static_assets = false 
config.assets.enabled = true 
config.assets.compress = true 
config.assets.debug = false 
config.assets.compile = false 
config.assets.digest = true 

最后,从配置/ application.rb中资产设置:

config.assets.enabled = true 
config.assets.version = '1.0' 

启动rails server进程的用户对公共/资产具有读取,写入和执行权限,所以我不认为这是权限问题。我错过了配置步骤吗?

编辑

我注意到,有没有错误,指出资产不预编译,所以我试图通过附加“/assets/application-892c6227e631daf9a8e041b1d4d002ec.css”每次从网页访问样式表主机路径末尾:

http://www.myapp.com"/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" 

这样工作并打开了样式表。

+0

相关/重复:http://stackoverflow.com/questions/5760661/rails-favicon-ico-not-found – 2014-03-04 09:17:42

回答

26

这个问题的进一步研究产生这种SO文章:

application.css not being served as an asset

看来

config.serve_static_assets = false 

是不正确的设置,只要我的Rails应用程序是不是背后Apache或Nginx的

运行
+0

我被这个抓住了。通常使用Apache,但在这种情况下通过IIS使用Thin。谢谢! – kim3er 2012-09-24 09:08:00

4

我有同样的问题,但我注意到你的样式表指向非指纹,非缓存文件的版本。如果您正在使用资产管道,为了利用它,您需要使用指向文件的指纹缓存版本的帮助程序。要做到这一点,你需要将erb嵌入到你的css文件中,或者使用sass。

错误:

.class { 
    background: url(asset.png) no-repeat; 
} 

正确的(使用SASS):

.class 
    background: image-url('asset.png') no-repeat 

欲了解更多信息,请看这里:http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets

如果你不关心的性能问题,你可以避免使用非缓存版本,直到升级到Rails 4或Rails 3.2.16,因为这些版本引入了迫使您使用资产管道的重大更改(并且它相应的语法)。如果您不使用新的语法,则非缓存版本在生产中根本不起作用。

+0

嘿,谢谢!但是,自从发布这个问题以来,我们最终将资产迁移到CDN,但我会记住这将用于未来的Rails项目! – BrMcMullin 2013-07-15 16:48:57

+0

不客气! :d – 2013-07-15 18:04:34

相关问题