【发布时间】:2013-07-25 16:41:32
【问题描述】:
在我的 Rails 应用程序中,我允许用户在创建“发布”时上传图像,并且它应该直接上传到 S3。我在开发和生产中都遇到了以下错误。
编辑:我应该注意,尝试从表单提交的发布编辑页面上传时会发生此错误。
ArgumentError in ReleasesController#update
missing required :bucket option
Rails.root: /Users/jasondemeuse/pressed
我之前在使用 Carrierwave 时没有遇到任何问题,但现在我使用的是 Paperclip,我无法弄清楚我做错了什么。我在 SO 和其他地方看到的所有修复都是 heroku 问题,但我在开发中遇到了同样的问题,并且没有一个修复有帮助。
这是相关代码(“...”表示不相关的sn-ps):
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'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 以及我找到的修复程序,但似乎没有任何效果。是否有我忘记运行的 rake 任务或捆绑包?
提前谢谢你!
编辑 2: 以下答案对我有很大帮助,切换到 fog gem 为我解决了大部分问题。以防其他人遇到同样的问题,我也遇到了另一个让我感到困惑的问题。如果您遇到 heroku 问题和Paperclip::PaperclipError (Item model missing required attr_accessor for 'image_file_name'):,请确保您运行heroku rake db:migrate,然后使用heroku restart 重新启动heroku。我加载了我的架构并错误地认为我不需要这样做。
上述can be found here的SO答案。
【问题讨论】:
-
你用的是什么版本的回形针?
-
3.4.2 - 我的 Gemfile 中有
gem "paperclip", "~> 3.0"。 -
我想尝试的一件事是运行
AWS_BUCKET=appname rails server,看看你是否仍然收到错误。 -
另外,问题是否出现在您的开发环境和 heroku 上,或者您是否仅在您的开发环境中进行了测试?
-
它以同样的方式发生在开发和生产/heroku 上,我想这就是为什么我认为这是我忽略的一个明显的愚蠢错误。
标签: ruby-on-rails heroku amazon-s3 paperclip