gpt4 book ai didi

ruby-on-rails - "missing required :bucket option"用于回形针/S3

转载 作者:行者123 更新时间:2023-12-04 01:47:05 25 4
gpt4 key购买 nike

在我的 Rails 应用程序中,我让用户在创建“发布”时上传图像,它应该直接上传到 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

生产.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

编辑:这也是我的 Controller 的相关部分
  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 的回答.

最佳答案

我想那是因为 :bucket应该是传递给 Paperclip 而不是 S3 的选项。
固定配置

  config.paperclip_defaults = {
:storage => :s3,
:s3_protocol => 'http',
:bucket => ENV['AWS_BUCKET'],
:s3_credentials => {
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}

Paperclip::Storage::S3 doc 似乎证实了这一点,即使编写/格式如此糟糕。

编辑:

在我的一个项目中,我使用带有 Fog gem 的 Paperclip 并且效果很好
Paperclip::Attachment.default_options.merge!(
:storage => :fog,
:fog_credentials => {
:provider => 'AWS',
:aws_access_key_id => ENV['S3_ACCESS_KEY_ID'],
:aws_secret_access_key => ENV['S3_SECRET_ACCESS_KEY'],
:region => 'eu-west-1' # in case you need it
},
:fog_directory => ENV['S3_BUCKET'], # only one of those is needed but I don't remember which
:bucket => ENV['S3_BUCKET']
)

关于ruby-on-rails - "missing required :bucket option"用于回形针/S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17863938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com