Я довольно новичок в ROR. Я недавно развернул приложение на heroku и попытался добавить функцию прикрепления к приложению с помощью скрепки.
Я выполнил все шаги по добавлению aws-s3 в свое приложение. Вот мой первоначальный код:
user.rb (модель)
has_attached_file :avatar,
:styles => {:small => "70x70>"},
:storage => :s3,
:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
:path => ":attachment/:id/:style/:basename.:extension"
validates_attachment_size :avatar, :less_than => 1.megabytes
validates_attachment_content_type :avatar, :content_type => ['image/jpeg', 'image/png']
s3.yml (файл находится в папке config) примечание: все эти блоки существуют на моем aws-s3
development:
bucket: my_avatar-dev
access_key_id: amazonaccesskey
secret_access_key: amazon_secret_access_key
test:
bucket: myapp_avatar-test
access_key_id: amazonaccesskey
secret_access_key: amazon_secret_access_key
production:
bucket: myapp_avatar-pro
access_key_id: amazonaccesskey
secret_access_key: amazon_secret_access_key
Gemfile
gem 'aws-s3'
При запуске этой конфигурации я получаю ошибку страницы 500 при загрузке моего приложения. Выполнение Heroku logs
показало следующую ошибку: AWS :: S3 :: MissingAccessKey (Вы не предоставили оба требуемых ключа доступа.
Поэтому я последовал некоторому совету и определил ключ и secret_key как переменные среды для heroku, используя следующую строку кода:
heroku config:add S3_KEY=amazonaccesskey S3_SECRET=amazon_secret_key
Затем я добавил инициализатор для тестирования сред и запуска через ключ или файл .yml в зависимости от среды, код выглядит следующим образом:
Инициализаторы / s3.rb
if Rails.env == "production"
# set credentials from ENV hash
S3_CREDENTIALS = { :access_key_id => ENV['S3_KEY'], :secret_access_key => ENV['S3_SECRET'], :bucket => "myapp_avatar-pro"}
else
# get credentials from YML file
S3_CREDENTIALS = Rails.root.join("config/s3.yml")
end
user.rb модель была обновлена до следующего:
has_attached_file :avatar, :storage => :s3, :s3_credentials => S3_CREDENTIALS
Затем я развернул на heroku и протестировал приложение, но все равно продолжаю получать ту же ошибку (стр. 500) и код ошибки: AWS :: S3 :: MissingAccessKey (Вы не предоставили оба необходимых ключа доступа.
Как это возможно, если я определил переменные в heroku? Есть ли что-то, что мне не хватает? Возможно ли это что-то с жемчужиной? Кроме того, я использую HAML для стиля ... не уверен, что это важно, но на всякий случай. Я совершенно потерян, поэтому любая помощь будет принята с благодарностью. Большое вам спасибо!