0

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

我已经添加gem 'rails_12factor'并尝试切换config.serve_static_assets = true但无济于事(rails_12factor无论如何都不为你做吗?)。

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

  1. 损坏的被部署到 Heroku 的“暖室”,而提供图像的则被部署到“宁静的地球”。

  2. 不提供图像的那个在 production.rb 中也有一些 Sendgrid 设置:

    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_rpmgem,工作的没有。它还利用了 ENV 变量管理 gemfigaro和 MailChimp 的gibbongem,而工作应用程序没有。不知道这会如何影响事情,但你比我更清楚。

最后说明:在我将自定义 CSS 和图像文件添加到 repo 之后,我的第一次部署,即使我确实已经安装了,也显示了一些与这篇 SO 帖子rails_12factor中详述的相同的奇怪错误,尽管它们在我的下一次部署中消失了,尽管没有有意义的变化(这看起来很奇怪):

    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 但不能提供图像?

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

4

2 回答 2

4

设置解决config.assets.compile=trueconfig/environments/production.rb问题,但我仍然不太明白为什么会出现问题。

于 2013-10-17T19:57:38.833 回答
0

调试此方案的一种方法:

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

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