Ruby on rails Heroku图像URL更改

Ruby on rails Heroku图像URL更改,ruby-on-rails,heroku,deployment,Ruby On Rails,Heroku,Deployment,我正在用heroku主机开发Rails4应用程序,我遇到了一点问题: 我在/assets/images/path_to_image中有一个助手方法,可以根据图像的路径随机选择图像,这个助手方法在我的HAML文件中被调用。它在我当地的环境中工作得很好。图像URL存储在数据库中。问题是Heroku将图像名称从logo.jpg更改为logo-a6d14b20c77aa6466e616313edcd3d34.jpg,这使我的助手方法变得无用。你知道我怎样才能解决这个问题吗?这是预编译资产的问题吗? 谢谢

我正在用heroku主机开发Rails4应用程序,我遇到了一点问题: 我在
/assets/images/path_to_image
中有一个助手方法,可以根据图像的路径随机选择图像,这个助手方法在我的HAML文件中被调用。它在我当地的环境中工作得很好。图像URL存储在数据库中。问题是Heroku将图像名称从
logo.jpg
更改为
logo-a6d14b20c77aa6466e616313edcd3d34.jpg
,这使我的助手方法变得无用。你知道我怎样才能解决这个问题吗?这是预编译资产的问题吗? 谢谢
B.

这是资产预编译的问题吗?

是的,我会这么说


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

解决此问题的方法是使用
资产路径帮助程序
,基本上如下所示:

image_path
asset_path
> rake assets:precompile RAILS_ENV=production

Heroku

看来你对Rails很精通,所以我不会用细节来烦你

Heroku的最佳工作方式是为静态资产提供服务,并在部署之前对其进行预编译:

#config/production.rb
config.serve_static_assets = true
然后,您需要使用生产环境预编译资产,如下所示:

image_path
asset_path
> rake assets:precompile RAILS_ENV=production
这将遍历您的资产并指定所有正确的路径,如果您使用了上述资产路径帮助器。之后,推到heroku&我也总是在heroku上预编译资产(我们使用资产同步gem):


在rails4中,默认情况下,资产获取摘要URL并获得服务

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

或者您可以关闭production.rb文件中的摘要,如下所示

config.assets.digest = false
如果你想要重定向解决方案,我也可以在这里发布

让我知道