在生产模式下,rails似乎没有从资产管道中找到任何预编译的资产。
我正在使用rails 3.2.0和ruby 1.9.3在CentOS上的RVM内部运行。没有其他Web服务器与此应用程序一起运行。该应用程序最近才被更新为使用资产管道,因为它最初是一个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"):
我不是指每个资产所在的文件夹;所有对资产的引用如下所示:
//css: .class { background: url(asset.png) no-repeat; } //erb: <%= image_tag "asset.png" %> <%= link_to "page",:class => "class" %>
production.rb中的资产管道相关设置:
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
最后,来自config / application.rb的资产设置:
config.assets.enabled = true config.assets.version = '1.0'
启动rails服务器进程的用户对public / assets有读,写和执行权限,所以我不认为这是一个权限问题。我错过了配置步骤吗?
编辑
我注意到没有错误说明资产没有被预先编译,所以我试图通过将“/assets/application-892c6227e631daf9a8e041b1d4d002ec.css”附加到主机路径的末尾,从网页访问样式表:
http://www.myapp.com"/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"
这工作,样式表打开。
进一步研究这个问题产生了这篇文章:
application.css not being served as an asset
它似乎
config.serve_static_assets = false
只要我的Rails应用程序没有运行在Apache或Nginx之后,这是一个不正确的设置