0

我正在开发一个带有heroku托管的Rails4应用程序,我遇到了一个问题:我有一个帮助方法可以通过它的路径随机选择一个图像,/assets/images/path_to_image这个帮助方法在我的HAML文件中被调用。它在我的本地环境中完美运行。图像 url 存储在数据库中。问题是 Heroku 将图像名称从 更改为logo.jpg使logo-a6d14b20c77aa6466e616313edcd3d34.jpg我的辅助方法无用。关于我如何解决这个问题的任何想法?是预编译资产的问题吗?非常感谢 B。

4

2 回答 2

0

是预编译资产的问题吗?

是的,我会这么说


您遇到的问题是生产环境编译了您的所有资产,因此为您提供了您所看到的散列文件名。这是一个问题的原因是,如果您在 CSS 或 HTML 中引用静态文件(logo.png),编译的路径会不同,从而导致问题发生。我们了解到,如果您要引用任何资产,请始终使用动态文件 (.scss / .haml / .html.erb),然后使用提供的帮助程序

解决这个问题的方法是使用asset path helpers,基本上是这样的:

image_path
asset_path

Heroku

看来您精通 Rails,所以我不会对细节感到厌烦

Heroku 通过在部署之前提供静态资产和预编译它们的效果最好:

#config/production.rb
config.serve_static_assets = true

然后,您需要使用生产环境预编译资产,如下所示:

> rake assets:precompile RAILS_ENV=production

如果您使用了上面提到的资产路径助手,这将遍历您的资产并分配所有正确的路径。之后,推送到 heroku 并且我总是在 Heroku 上预编译资产(我们使用asset_sync gem):

> heroku run rake assets:precompile --app [app_name]
于 2013-10-18T09:00:06.763 回答
0

默认情况下,在 rails4 中,资产与它们一起获取摘要 URL 并获得服务。

如果您愿意,可以使用一些中间件将资产从非摘要路径重定向到摘要路径。

或者您可以像下面一样关闭 production.rb 文件中的摘要。

config.assets.digest = false

如果您想要该重定向解决方案,我也可以在此处发布。

让我知道!

于 2013-10-18T21:34:05.320 回答