AWS S3, отсутствует скрепка для патрона: опция ковша
Я пытаюсь использовать Paperclip и SWS S3 на Heroku, чтобы пользователи могли загружать изображения.
У меня нет учетных данных, хранящихся в файле yml. Я следил за инструкциями на странице Heroku:
https://devcenter.heroku.com/articles/paperclip-s3
Но когда я пытаюсь запустить приложение и загружать изображение, я получаю это сообщение:
missing required :bucket option
Rails.root: /Users/scottsipiora/Sites/clycss
Application Trace | Framework Trace | Full Trace
app/controllers/instructors_controller.rb:63:in `block in update'
app/controllers/instructors_controller.rb:62:in `update'
В инструкциях ничего не говорится о внесении изменений в мой контроллер. Я видел несколько примеров, в которых мне хотелось добавить что-то вроде:
В моей модели у меня есть следующий код:
class Instructor < ActiveRecord::Base
attr_accessible :bio, :hometown, :name, :school, :sort_order, :started_sailing, :started_teaching, :photo
has_attached_file :photo, styles: {
thumb: '100x100>',
square: '200x200#',
medium: '300x300>'
}
end
В моем production.rb у меня (очевидно, замена моих реальных учетных данных макетными учетными данными):
config.paperclip_defaults = {
:storage => :s3,
:s3_credentials => {
:bucket => ENV['bucket name'],
:access_key_id => ENV['key_id'],
:secret_access_key => ENV['access_key']
}
}
Я также создал отдельные ведра для Production и Dev, поэтому все чище.
Любые идеи? Я относительно новый, и это должно быть довольно легко.
Спасибо заранее.
Ответы
Ответ 1
Я думаю, вы, возможно, совершили ту же ошибку, что и я. В файле production.rb не редактируйте текст, чтобы добавить свои специальные ключи S3. Просто скопируйте текст непосредственно, как указано в учебнике.
#production.rb
config.paperclip_defaults = {
:storage => :s3,
:s3_credentials => {
:bucket => ENV['AWS_BUCKET'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
Затем установите переменные окружения AWS_BUCKET, AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY, как описано автором статьи центра Dev.
Ответ 2
Сделайте heroku config
, чтобы проверить переменные среды.
Как правило, все они являются шапками и имеют нижние рамки вместо пробелов.
Если он не установлен, вы должны установить переменную окружения с помощью
heroku config:add BUCKET_NAME=my_bucket_name
Обновите свой код:
:bucket => ENV['BUCKET_NAME'],
ссылка Heroku
Ответ 3
Скотт, извините, если здесь была какая-то путаница.
Я автор статьи Dev Center. Как указано выше в B Seven, AWS Config Vars необходимо установить в приложении Heroku.
Недавно Heroku обновила свою документацию (https://devcenter.heroku.com/articles/config-vars#example), а set
предпочитает более add
в будущем.
$ heroku config:set AWS_BUCKET=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
Ответ 4
Убедитесь, что вы выбрали свой CLI при настройке значений с помощью переменных окружения. Не будьте похожими на меня и правильно настройте Paperclip и AWS с переменными ENV, а затем потратите кучу времени на Google, чтобы исправить проблему, уволив и снова открыв терминал. 😞
Ответ 5
- Вставить в таблицу schema.rb "инструкторы" этой строки
create_table "instructors" do |t|
...
t.string "bucket"
end
- Добавить в контроллер
@instructor[:bucket] = ENV['S3_BUCKET_NAME']
- Запустить "rake db: setup"