В моем приложении Rails я разрешаю пользователям загружать изображение, когда они создают "выпуск", и он должен загружаться непосредственно на S3. Я получаю следующую ошибку как в разработке, так и в производстве.
РЕДАКТИРОВАТЬ: Я должен заметить, что эта ошибка возникает при попытке загрузить с страницы редактирования выпуска в форме submit.
ArgumentError in ReleasesController#update
missing required :bucket option
Rails.root: /Users/jasondemeuse/pressed
Я делал это раньше, без проблем с использованием Carrierwave, но не могу понять, что я делаю неправильно сейчас, когда я использую Paperclip. Все исправления, которые я видел в SO и в других местах, - проблемы геройки, но у меня такая же проблема при разработке, и ни одна из исправлений не помогла.
Здесь соответствующий код ( "..." указывает не соответствующие фрагменты):
development.rb
Appname::Application.configure do
...
config.paperclip_defaults = {
:storage => :s3,
:s3_protocol => 'http',
:s3_credentials => {
:bucket => ENV['AWS_BUCKET'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
end
production.rb
Appname::Application.configure do
...
config.paperclip_defaults = {
:storage => :s3,
:s3_protocol => 'http',
:s3_credentials => {
:bucket => ENV['AWS_BUCKET'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
end
release.rb
class Release < ActiveRecord::Base
attr_accessible ... :banner
belongs_to :user
has_attached_file :banner, styles: {
thumb: '100x100>',
square: '200x200#',
medium: '300x300>',
spread: '1200x200'
}
has_many :banners, :dependent => :destroy
accepts_nested_attributes_for :banners, :allow_destroy => true
end
show.html.erb
<%= image_tag @release.banner.url(:medium) %>
<%= @release.banner.url %>
// Have both of these in for now to see if they work, but since the upload isn't working it giving me the missing.png
_form.html.erb
<%= f.label "Add A Banner?" %><br />
<%= f.file_field :banner %>
Конфигурация heroku (для этого есть то же самое в .bash_profile)
AWS_ACCESS_KEY_ID: XXXXXXXXXXXXXXXX
AWS_BUCKET: appname
AWS_SECRET_ACCESS_KEY: XXXXXXXXXXXXXXXXXXXXXXXXXXX
EDIT: Здесь моя соответствующая часть моего контроллера тоже
def update
@release = Release.find(params[:id])
respond_to do |format|
if @release.update_attributes(params[:release])
format.html { redirect_to [@user,@release], notice: 'Release was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @release.errors, status: :unprocessable_entity }
end
end
end
Я знаю, что это должно быть предельно просто, и я уверен, что просто забыл что-то очевидное, но я перешел это пошаговое руководство а также исправления, которые я нашел, и ничего не работает. Есть ли задача или пакет, который я забыл запустить или что-то еще?
Заранее благодарю вас!
EDIT 2: Ниже ответы помогли мне много, и переход на fog
драгоценный камень фиксировал большинство вещей для меня. На всякий случай, если у других возникают такие же проблемы, у меня также возникла еще одна проблема, которая заставляла меня сбивать с толку. Если у вас проблемы с героком и Paperclip::PaperclipError (Item model missing required attr_accessor for 'image_file_name'):
, убедитесь, что вы запустили heroku rake db:migrate
, а затем перезапустите heroku с помощью heroku restart
. Я загрузил свою схему и ошибочно предположил, что мне не нужно это делать.
Ответ SO с приведенным выше можно найти здесь.