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"