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