AWS S3, отсутствует скрепка для патрона: опция ковша - программирование

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, поэтому все чище.

Любые идеи? Я относительно новый, и это должно быть довольно легко.

Спасибо заранее.

4b9b3361

Ответ 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"