2016-01-12 1 views
0

Мое приложение использует следующие камни:REFILE Gem Image Ссылки Разбейте Когда я нажимаю Новый Обязаться Heroku

gem "refile", require: "refile/rails" 
gem "refile-s3" 
gem "refile-mini_magick" 

Что мое приложение делает то, что он будет загружать файлы изображений в экземпляре AWS S3, а затем получает извлекаться используя вспомогательные методы из драгоценного камня Refile.

Все работает должным образом, когда я запускаю его локально.

Проблема в том, что я нажимаю свое приложение на Heroku, я могу загружать изображения и отображать их правильно. Тем не менее, когда я нажимаю новую фиксацию на Heroku, все предыдущие ссылки ссылок нарушаются.

Я проверил, что file_id изображения на странице - это тот же файл_ид изображения в базе данных Heroku.

Это моя форма загрузки для моих изображений:

<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 (идентификатор ключа доступа, секретный ключ доступа и имя ведра).

Это сбруя загрузить на 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) 

Другая вещь, которую я заметил, что мой S3 ведро не держали изображения в нужную папку, если я загрузил через мое приложение Heroku. Однако, если я загрузил изображение с помощью локального сервера, я могу увидеть изображение в своем ведомом 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

Связь с приложением heroku не проходит через S3 и, возможно, сохраняет изображения локально. Это причина, по которой каждый геройский удар разбивает ваши изображения. – uday

+0

Не похоже, что изображения хранятся локально, потому что, если я получаю доступ к прямому приложению через другой компьютер, я могу видеть изображения, которые были загружены после самого нового нажатия. – Tony

ответ

0

Я сделал глупую ошибку, когда я первый начал разработку этого приложения. В моем .gitignore я поставил правило «/ config/*», чтобы он не загружал мой аксессуар в Heroku.

Я тогда удалил это правило и поставить более жесткие правила, чтобы просто игнорировать важные файлы, содержащие ключи т.е. «/config/*.yml»

Он работает сейчас, я надеюсь, что кто-то может узнать из моей ужасной ошибки.