当我向Heroku推送一个新的提交时,反映宝石图像链接中断

时间:2016-01-12 22:19:06

标签: ruby-on-rails-3 heroku refile

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

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

1 个答案:

答案 0 :(得分:0)

当我第一次开始开发这个应用程序时,我犯了一个愚蠢的错误。在我的.gitignore中,我将规则“/ config / *”设置为没有将我的访问者上传到Heroku。

然后我删除了该规则,并加入更严格的规则来忽略包含密钥的敏感文件,即“/ config / *。yml”

它现在有效,我希望有人能从我可怕的错误中吸取教训。