3

我在 Heroku 上有一个登台服务器,它与我的生产服务器(也在 Heroku 上)推送了相同的代码,并且没有任何资产在登台中加载,但它们都在生产中工作。导轨 3.2.11。

assets:precompile 有效,我可以使用 bash 登录并查看在 public/assets 下预编译的所有资产。但是当我尝试查看它们时,我不断收到 404。

日志中有很多这样的内容:

ActionController::RoutingError (No route matches [GET] "/assets/team_accessories_ad.png"):

我觉得我几乎什么都试过了。即使文件在那里,它也不会路由到公共/资产来获取它们。我在做一些明显错误的事情吗?

谢谢

编辑:在我的情况下,它是由 12factor gem ( https://github.com/heroku/rails_12factor ) 引起的。当我移除这个宝石时,一切都开始工作了!

谢谢

4

2 回答 2

0

您的问题是您的图像在您的资产文件中没有动态链接:


SCSS

Rails 与SCSS捆绑在一起,因为这允许您正确预编译图像资源。SCSS 在你使用时是动态渲染的rake assets:precompile,而 CSS 不能动态渲染资源

因为Rails 在预编译时对资产进行指纹识别,这意味着许多图像资产(其名称为XXXX.pngbefore precompile )在预编译后将具有损坏的路径(使它们XXX-dsdasdfew5823459432jt342j52435.png

解决方案是在scss中使用动态图片路径:

#app/assets/stylesheets/images.css.scss
body {
    background: asset_url('image_path.png')
}

这允许您在预编译时动态渲染图像路径,让您能够在生产中查看图像

于 2013-11-15T10:18:03.030 回答
0

我遇到了同样的问题,结果证明是由于Rails 4 处理静态文件的方式发生了变化。我将 rails_12factor gem 添加到我的生产组中,它解决了这个问题。rails_serve_static_assets我想我可以通过添加但没有尝试而逃脱。

于 2015-02-16T02:26:35.803 回答