在 Heroku 和 S3 中使用 .slugignore 不起作用



Background

我有一个回购,对 Heroku 来说太大了,大约 500mb。这是由于app/assets/images文件夹中有很多图像。我最近尝试将图像同步到 S3,而不是将它们存储在我的存储库中。

我使用 gem asset_sync 同步文件和.slugignore文件来强制 Heroku 忽略资产文件,所以现在回购大约是 70mb,但仍然存在问题。现在这些文件不在 Heroku 的存储库中,这意味着image_path找不到该文件,因此image_path "image.png"链接到 /images/image.png 而不是 /assets/image.png ,一个 S3 中不存在的文件。

如何解决这个问题?

总结一下

使用 .slugignore 从 Heroku 中删除所有资产并将所有图像指向 S3 会导致image_path "f.png"链接到http://s3.com/images/f.png而不是http://s3.com/assets/f.png

请注意,使用绝对路径有效。 image_path "/assets/f.png",但 rails 不会在文件后添加摘要。

体面

  • 导轨4.0.11
  • asset_sync 1.1.0

文件

  • .slugignore https://gist.github.com/oleander/2699ce91be6cfbf8b90a
  • config/environments/production.rb https://gist.github.com/oleander/39e1ddeb60e5f697e6b1

更新

我目前正在使用此快速修复程序来强制轨道使用图像的绝对路径。

# app/helpers/application_helper.rb
module ApplicationHelper
  def image_tag(path, *args)
    if path[0] != "/" and path !~ /^http/
      path = File.join("/assets", path)
    end
    super(path, *args)
  end
end

这与你忽略 heroku 上的资产文件夹无关。问题是asset_sync默认映射到存储桶的根目录,但是您的资产位于存储桶中的资产子文件夹下。 要解决此问题,请在 production.rb 中添加资产前缀。

config.assets.prefix = "/assets"

最新更新