我的应用程序使用以下宝石:
gem "refile", require: "refile/rails"
gem "refile-s3"
gem "refile-mini_magick"
我的应用程序的作用是将图像文件上传到AWS S3实例,然后使用Refile gem中的帮助方法检索。
当我在本地运行时,一切都按预期工作。
问题是,当我将我的应用程序推送到Heroku时,我可以上传图像并正确显示。但是,当我将更新的提交推送到Heroku时,之前所有图像的链接都会中断。
我已经检查过页面上图像的file_id与Heroku数据库中图像的file_id相同。
这是我的图片上传表单:
<div class="field">
<%= f.label :images_files %><br>
<%= f.attachment_field :images_files, multiple: true, presigned: true, direct: true %>
</div>
这是我的图片的片段:
<%= attachment_image_tag(project.images.first, :file, :fill, 750, 400) %>
我在Heroku上正确设置了我的环境变量,以便它知道我的AWS实例的密钥(访问密钥ID,秘密访问密钥和存储桶名称)。
这是上传到S3的访问者:
# config/initializers/refile.rb
require "refile/s3"
aws = {
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
region: "us-west-1",
bucket: ENV['export S3_BUCKET'],
}
Refile.cache = Refile::S3.new(prefix: "cache", **aws)
Refile.store = Refile::S3.new(prefix: "store", **aws)
我注意到的另一件事是,如果我通过我的Heroku应用程序上传,我的S3存储桶没有将图像保存在正确的文件夹中。但是,如果我使用本地服务器上传图像,我可以在S3存储桶中看到图像。我不确定为什么,因为所有环境变量都是正确的,我已经仔细检查了它。
这是Heroku日志试图加载图片的片段:
2016-01-12T23:04:39.448906+00:00 app[web.1]: Refile::App: Could not find attachment by id: d8fffa94c41f9f0ae1b233d69a75787a9a29340a9a83a831385d84d53ad8
2016-01-12T23:04:39.442789+00:00 heroku[router]: at=info method=GET path="/attachments/8718f3743b8d7c91e296ac5f0e6ea324d1fd2868/store/fit/800/475/aee08fe8f97269
826c51a77a11995c77467e24aa3581563d6f298e0dbf9b/file" host=www.domainname.com request_id=49edc34f-2d37-4ae4-9a58-e6265e00032e fwd="99.100.27.10" dyno=web.1 connect
=1ms service=9ms status=404 bytes=424
答案 0 :(得分:0)
当我第一次开始开发这个应用程序时,我犯了一个愚蠢的错误。在我的.gitignore中,我将规则“/ config / *”设置为没有将我的访问者上传到Heroku。
然后我删除了该规则,并加入更严格的规则来忽略包含密钥的敏感文件,即“/ config / *。yml”
它现在有效,我希望有人能从我可怕的错误中吸取教训。