Heroku图像URL更改

时间:2013-10-18 08:53:27

标签: ruby-on-rails heroku deployment

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

2 个答案:

答案 0 :(得分:0)

是否需要预先编制资产?

是的,我会这样说


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

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

image_path
asset_path

<强>的Heroku

看来你对Rails非常熟悉,所以我不会厌烦你的细节

Heroku通过提供静态资产&amp;在部署之前预先编译它们:

#config/production.rb
config.serve_static_assets = true

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

> rake assets:precompile RAILS_ENV=production

这将通过您的资产和如果您已使用上述资产路径助手,则指定所有正确的路径。之后,推送到heroku&amp;我总是在Heroku上预编译资产(我们使用asset_sync gem):

> heroku run rake assets:precompile --app [app_name]

答案 1 :(得分:0)

在rails4中,默认情况下,资产会获取摘要网址并获得服务。

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

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

config.assets.digest = false

如果你想要那个重定向解决方案,我也可以在这里发布。

让我知道!