在我的Rails应用程序我让用户上传图片时,他们创造了“释放”,它应该直接上传到S3。我在开发和生产中遇到以下错误。“缺少必需的:斗选项”的回形针/ S3
编辑:我应该注意,当试图从表单提交上的发布编辑页面进行上传时发生此错误。
ArgumentError in ReleasesController#update
missing required :bucket option
Rails.root: /Users/jasondemeuse/pressed
我以前用过Carrierwave没有问题,但是现在不知道我在做什么,现在我正在使用Paperclip。我在SO和其他地方看到的所有修复都是heroku问题,但是我在开发中遇到了同样的问题,而且所有修复都没有帮助。
下面是相关的代码( “...” 表示不相关的片段):
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
发布.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's 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
编辑:这是我我的控制器的相关部分也
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
我知道这应该是非常简单,我敢肯定,我只是忘了一些东西很明显,但我已经去在this walkthrough以及我找到的修复和似乎没有任何工作。是否有一个耙子任务或束我忘了跑或什么?
预先感谢您!
编辑2:下面的答案帮了我很多,并且切换到fog
gem修复了我的大部分事情。以防其他人遇到这些相同的问题,我也遇到了另一个让我感到困惑的问题。如果您遇到了heroku问题和Paperclip::PaperclipError (Item model missing required attr_accessor for 'image_file_name'):
,请确保您运行heroku rake db:migrate
,然后使用heroku restart
重新启动heroku。我加载了我的模式,错误地认为我不需要那样做。
甲SO与上述can be found here回答。
您正在使用什么版本的回形针? – gregates
3.4.2 - 我在Gemfile中有gem“paperclip”,“〜> 3.0”'。 – Jason
我猜想有一件事是尝试运行'AWS_BUCKET = appname rails server'并查看是否仍然出现错误。 – gregates