我在Heroku上有一个临时服务器,它的相同代码被推送到我的生产服务器(也在Heroku上),并且没有任何资产加载到分段中,但它们都在prod中工作。 Rails 3.2.11。
资产:预编译工作,我可以使用bash登录并查看在公共/资产下预编译的所有资产。但是当我试图查看它们时,我一直得到404。
日志得到了很多:
ActionController::RoutingError (No route matches [GET] "/assets/team_accessories_ad.png"):
我觉得我已经尝试了一切。即使文件存在,它也不会路由到公共/资产来获取它们。我做了一件明显不对的事吗?
由于
编辑:在我的情况下,它是由12factor gem(https://github.com/heroku/rails_12factor)引起的。当我删除这个宝石时,一切都开始工作了!
由于
答案 0 :(得分:0)
您的问题是您的图片未在资产文件中动态关联:
<强> SCSS 强>
Rails与SCSS捆绑在一起,因为这样可以正确预编译图像资源。使用rake assets:precompile
时动态呈现SCSS,而CSS无法动态呈现资产
因为Rails fingerprints the assets预编译它们时,这意味着许多图像资产(在编译之前名称为XXXX.png
)将在预编译之后具有损坏的路径(使它们成为{{3}} 1}})
解决方案是在scss中使用动态图像路径:
XXX-dsdasdfew5823459432jt342j52435.png
这允许您在预编译时动态渲染图像路径,使您能够在生产中查看图像
答案 1 :(得分:0)
我遇到了同样的问题,结果是由how Rails 4 handles static files的变化引起的。我将rails_12factor gem添加到我的生产组,它解决了这个问题。我想我可以通过添加rails_serve_static_assets
而离开,但没有尝试过。