当我向Heroku推送新的承诺时,Refile Gem图像链接断开



我的应用程序正在使用以下宝石:

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、秘密访问密钥和bucket名称)。

这是要上传到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 bucket没有将图像保存在正确的文件夹中。然而,如果我使用本地服务器上传了一个图像,我可以在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

我刚开始开发这个应用程序时犯了一个愚蠢的错误。在我的.gitignore中,我放入了规则"/config/*",这样它就不会将我的访问器上传到Heroku。

然后我删除了该规则,并制定了更严格的规则来忽略包含密钥的敏感文件,即"/config/*.yml"

它现在起作用了,我希望有人能从我的错误中吸取教训。

最新更新