Heroku上的Rails 4应用程序服务于CSS和JS但不支持图像资源

时间:2013-10-05 05:55:00

标签: ruby-on-rails heroku ruby-on-rails-4

我已经为Heroku部署了一个Rails 4应用程序,它可以很好地为我的CSS和JS资源提供服务但是找不到图像(404)。

我已添加gem 'rails_12factor'并试图切换config.serve_static_assets = true但无效(但rails_12factor还没有为您做到这一点?)。

最奇怪的是它与我最近部署的另一个Rails 4应用程序几乎相同,它与资产没有任何问题。这两个应用程序之间只有一些差异(从配置的角度来看):

  1. 破碎的部署被部署到Heroku的“暖室”,而那个服务图像的部署则被部署到“宁静地球”。

  2. 没有提供图片的那个也有生产中的Sendgrid的一些设置.rb:

    config.action_mailer.smtp_settings = {
    :address        => 'smtp.sendgrid.net',
    :port           => '587',
    :authentication => :plain,
    :user_name      => ENV['SENDGRID_USERNAME'],
    :password       => ENV['SENDGRID_PASSWORD'],
    :domain         => 'heroku.com'
    }
    config.action_mailer.delivery_method ||= :smtp
    

    我无法想象这会对任何有意义的事情产生什么影响。

  3. 破碎的宝石安装了newrelic的newrelic_rpm宝石,工作宝石没有。它还使用了ENV变量管理gem figaro和MailChimp的gibbon gem,而工作应用程序却没有。不确定这会对事情产生什么影响,但你比我更清楚。

  4. 最后的注意事项:在我将自定义CSS和图像文件添加到repo后,我的第一次部署,即使我安装了rails_12factor,也显示了一些与奇怪错误相同的错误。在this SO post中有详细说明,尽管它们在我的下次部署中消失了,尽管没有任何有意义的更改(这看起来很奇怪):

        Running: rake assets:precompile
        I, [2013-10-05T04:25:02.831526 #626]  INFO -- : Writing /tmp/build_0eea2e50-5876-4521-b7f6-7ca902cb129b/public/assets/bg-c63ed011f04c5167903c6d603521adfb.jpg
        I, [2013-10-05T04:25:02.836773 #626]  INFO -- : Writing /tmp/build_0eea2e50-5876-4521-b7f6-7ca902cb129b/public/assets/coding_school-3bcbdaea6f8c23b774d27df4b608647a.jpg
        I, [2013-10-05T04:25:02.840352 #626]  INFO -- : Writing /tmp/build_0eea2e50-5876-4521-b7f6-7ca902cb129b/public/assets/down_arrow_select-0b10b4ac52a74389bbc3abbb3a8cde7a.jpg
        I, [2013-10-05T04:25:03.013966 #626]  INFO -- : Writing /tmp/build_0eea2e50-5876-4521-b7f6-7ca902cb129b/public/assets/application-0c6f0f27ac77563741a04576653d7c0e.css
        Asset precompilation completed (3.22s)
    

    什么可能导致应用程序服务CSS和JS罚款,但不是图像?

    为什么我的两个几乎相同的应用程序之间会有所不同?

2 个答案:

答案 0 :(得分:4)

config.assets.compile=true中设置config/environments/production.rb解决了这个问题,但我仍然不太明白问题发生的原因。

答案 1 :(得分:0)

调试此方案的方法:

在浏览器中打开制作应用(例如Chrome),打开开发者工具,重新加载页面,检查图像请求:

  • 请求的URL是您期望的URL(即,是否附加了MD5校验和)?如果缺少校验和:当您应该使用Rails <img src='/images/image.png'></img>时,可能已经以<%= image_tag('image.png')样式插入了图像。谷歌的助手。
  • 如果网址符合预期:图片请求的状态和响应是什么?如果是404,请确保您已正确指定了image_tag帮助程序中的路径(如果有的话,可能不需要预先添加/images之类的内容。尝试一下,直到找到答案。