2015-10-10 5 views
1

У меня возникли проблемы с использованием Amazon s3 для управления загружаемыми изображениями с помощью Paperclip через Heroku. Я новичок в этом и нуждаюсь в помощи.Amazon s3, Paperclip, Heroku - пытаясь заставить его работать

Мой Gemfile настроен таким образом:

gem 'paperclip', '~> 4.3.0' 

gem 'aws-sdk', '< 2' 

Я гугл проблемы, и я уверен, что ведро и нужные клавиши сконфигурированы как они должны быть. Ниже приведено сообщение об ошибке.

2015-10-10T15:42:22.470342+00:00 app[web.1]: (1.4ms) BEGIN 
2015-10-10T15:42:22.538108+00:00 app[web.1]: SQL (1.3ms) INSERT INTO "pins" ("description", "image_file_name", "image_content_type", "image_file_size", "image_updated_at", "user_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING "id" [["description", "huggable dog"], ["image_file_name", "huskie.jpg"], ["image_content_type", "image/jpeg"], ["image_file_size", 107437], ["image_updated_at", "2015-10-10 15:42:21.625762"], ["user_id", 3], ["created_at", "2015-10-10 15:42:22.532123"], ["updated_at", "2015-10-10 15:42:22.532123"]] 
2015-10-10T15:42:23.614978+00:00 heroku[router]: at=info method=POST path="/pins" host=pixblog.herokuapp.com request_id=a95e7cb8-bfd6-4de9-9e76-51f697f1b5d0 fwd="50.185.53.42" dyno=web.1 connect=1ms service=2468ms status=500 bytes=1754 
2015-10-10T15:42:23.607308+00:00 app[web.1]: (1.7ms) ROLLBACK 
2015-10-10T15:42:23.610744+00:00 app[web.1]: 
2015-10-10T15:42:23.610748+00:00 app[web.1]: ArgumentError (missing required :bucket option): 
2015-10-10T15:42:23.610749+00:00 app[web.1]: app/controllers/pins_controller.rb:31:in `create' 
2015-10-10T15:42:23.610751+00:00 app[web.1]: 
2015-10-10T15:42:23.610752+00:00 app[web.1]: 
2015-10-10T15:42:23.608813+00:00 app[web.1]: Completed 500 Internal Server Error in 2004ms (ActiveRecord: 5.8ms) 
updating Heroku CLI...Update hash signature mismatch 
/Users/DigitalEtchings/.heroku/client/lib/heroku/updater.rb:10:in `error' 
/Users/DigitalEtchings/.heroku/client/lib/heroku/updater.rb:127:in `block (2 levels) in update' 
/usr/local/heroku/ruby/lib/ruby/1.9.1/tmpdir.rb:83:in `mktmpdir' 
/Users/DigitalEtchings/.heroku/client/lib/heroku/updater.rb:116:in `block in update' 
/Users/DigitalEtchings/.heroku/client/lib/heroku/updater.rb:88:in `wait_for_lock' 
/Users/DigitalEtchings/.heroku/client/lib/heroku/updater.rb:112:in `update' 
/Users/DigitalEtchings/.heroku/client/lib/heroku/updater.rb:101:in `autoupdate' 
/Users/DigitalEtchings/.heroku/client/lib/heroku/cli.rb:28:in `start' 
/usr/local/bin/heroku:24:in `<main>' 

Я понимаю, ошибка аргумент, который указывает на pins_controller.rb, код на этой странице, обрабатывает результат загрузки изображений - что не происходит. Помогите?

ответ

0

Я дала объяснение этому here

Это вы должны получить установку с скрепку, S3 & Heroku.

+0

Отлично. У меня больше нет ошибок. Все почти правильно. Почти. Изображения не отображаются! (Они просто имеют знак вопроса, где они должны быть.) Я проверил консоль Amazon и изображения там сидят. Что может быть проблемой сейчас? На этот раз я буду спать, но я чувствую, что перешел через горб. Большое спасибо, я ценю помощь. –

+0

Если у ковша есть изображения, это означает, что механизм в вашем приложении работает. Может быть несколько причин, по которым они не показываются. Я бы начал с проверки моих прав на ведро. Затем, как я показываю их в представлении. – ybb

0

ArgumentError (отсутствуют обязательные: вариант ведра):

ошибка просто означает, что вы не имеете возможности, установленные для вашего Paperclip, например, в вашем приложении.

Существует great tutorial here.

Вам нужно сделать следующее:

#config/environments/production.rb 
config.paperclip_defaults = { 
    storage: :s3, 
    s3_credentials: { 
    access_key_id: ENV['AWS_ACCESS_KEY_ID'], 
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'] 
    } 
    bucket: ENV['S3_BUCKET_NAME'] 
} 

Это затем объединяется с ENV присваивания значения переменной Heroku «s следующим образом:

$ heroku config:set S3_BUCKET_NAME=your_bucket_name 
$ heroku config:set AWS_ACCESS_KEY_ID=your_access_key_id 
$ heroku config:set AWS_SECRET_ACCESS_KEY=your_secret_access_key 

В Rails 4+, вы будете лучше всего использовать их config/secrets.rb hash:

#config/secrets.rb 
production: 
    s3: 
    :bucket: "bucket_name" 
    :access: "access_key_id" 
    :secret: "secret_access_key" 

Th это даст вам возможность ссылаться на:

#config/application.rb 
config.paperclip_defaults = { 
    storage: :s3, 
    s3_credentials: { 
    access_key_id:  Rails.application.secrets.s3[:access], 
    secret_access_key: Rails.application.secrets.s3[:sercret] 
    } 
    bucket: Rails.application.secrets.s3[:bucket] 
} 

Красота этого является то, что вы можете заполнить ваш secrets с ENV ВАРА:

#config/secrets.rb 
development: 
    s3: 
    :bucket: "dev_bucket_name" 
    :access: "access_key_id" 
    :secret: "secret_access_key" 
production: 
    s3: 
    :bucket: ENV["AMAZON_S3_BUCKET"] 
    :access: ENV["AMAZON_ACCESS_KEY_ID"] 
    :secret: ENV["AMAZON_SECRET_ACCESS_KEY"] 

Мы нашли небольшую проблему со стандартной Heroku рекомендация; Вы должны включить bucket вариант для paperclip внешней стороны s3_credentials хэша:

enter image description here


В отношении изображений не появляются, есть целый ряд потенциальных проблем:

Загрузить

Ваши изображения фактически загружены?

Самый простой способ проверить - перейти на свою учетную запись S3 и искать их. Если они есть, это говорит о том, что у вас есть проблема с разрешениями/Rails, чтобы они не показывались; если нет, значит, у вас будет какая-то другая проблема.

От того, что вы опубликовали, я настоятельно рекомендую выбрать ваши журналы Heroku. Если вам не нравится просматривать сквозные тексты, вы можете добавить LogEntries к своему приложению - он позволяет просматривать фид live, который дает вам явные журналы из Rails.

Rails

Одна из наиболее распространенных проблем, с Rails является то, что он все равно будет пытаться загрузить активы от вашего местного назначения. Мы всегда используем s3_host_name, чтобы указать хозяина. Сэмплер будет извлекать данные из.

Это проблема, особенно с европейскими ковшиками - мы обошли ее, определив s3_host_name, как вы можете видеть выше.

Смежные вопросы