Ruby on rails 回形针S3 Heroku-缺少必需的:桶选项

Ruby on rails 回形针S3 Heroku-缺少必需的:桶选项,ruby-on-rails,amazon-s3,paperclip,Ruby On Rails,Amazon S3,Paperclip,我尝试在Heroku上使用回形针和SWS S3,让用户上传图像 创建新用户时,我会遵循我拥有的 ArgumentError in UsersController#create app/controllers/users_controller.rb:28:in `create' 我对此一无所知 用户\u controller.rb def create @user = User.new(params[:user]) if @user.save sign_in @us

我尝试在Heroku上使用回形针和SWS S3,让用户上传图像

创建新用户时,我会遵循我拥有的

ArgumentError in UsersController#create

app/controllers/users_controller.rb:28:in `create'
我对此一无所知

用户\u controller.rb

def create
    @user = User.new(params[:user])
    if @user.save
      sign_in @user
      flash[:success] = "Welcome to bequem!"
      redirect_to @user
    else
      render 'new'
    end
  end
new.html.erb

<div class="col-md-4 col-md-offset-4">
<%= provide(:title, 'Sign up') %>
<h1>Sign up</h1>


<%= form_for(@user) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>

  <%= f.label :avatar %><br />
  <%= f.file_field :avatar %>
-->
  <%= f.label :name %>
  <%= f.text_field :name %>

  <%= f.label :email %>
  <%= f.text_field :email %>

  <%= f.label :password %>
  <%= f.password_field :password %>

  <%= f.label :password_confirmation, "Confirmation" %>
  <%= f.password_field :password_confirmation %>

  <%= f.submit "Create my account", :class => "btn btn-large btn-primary" %>
<% end %>


</div>
用户模型

class User < ActiveRecord::Base

  # This method associates the attribute ":avatar" with a file attachment
  has_attached_file :avatar, styles: {
    thumb: '100x100>',
    square: '200x200#',
    medium: '300x300>'
  }

  attr_accessible :name, :email, :password, :password_confirmation, :avatar
class用户”,
正方形:“200x200#”,
中等:“300x300>”
}
属性可访问:姓名、电子邮件、密码、密码确认、头像
文书日志

Started GET "/signup" for 176.226.131.101 at 2014-01-20 17:45:54 +0000 
Jan 20 09:45:55 milker app/web.1:  Processing by UsersController#new as HTML 
Jan 20 09:45:55 milker app/web.1:    Rendered shared/_error_messages.html.erb (0.6ms) 
Jan 20 09:45:55 milker app/web.1:    Rendered users/new.html.erb within layouts/application (164.7ms) 
Jan 20 09:45:55 milker app/web.1:    Rendered layouts/_shim.html.erb (0.0ms) 
Jan 20 09:45:55 milker app/web.1:  Completed 200 OK in 199ms (Views: 168.1ms | ActiveRecord: 15.3ms) 
Jan 20 09:46:11 milker app/web.1:  Started POST "/users" for 176.226.131.101 at 2014-01-20 17:46:11 +0000 
Jan 20 09:46:11 milker app/web.1:  Processing by UsersController#create as HTML 
Jan 20 09:46:11 milker app/web.1:    Parameters: {"utf8"=>"✓", "authenticity_token"=>"5KZg5kTVOWKN/VBFlw6BC5pJe1EGCBYtVN5zBXLXNT4=", "user"=>{"avatar"=>#<ActionDispatch::Http::UploadedFile:0x007f4f673ad6b8 @original_filename="3adPUTPPeg8.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user[avatar]\"; filename=\"3adPUTPPeg8.jpg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<Tempfile:/tmp/RackMultipart20140120-2-n87ap6>>, "name"=>"slasher", "email"=>"slava.proshechkin@softeica.ru", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Create my account"} 
Jan 20 09:46:11 milker app/web.1:  Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:11 milker app/web.1:  Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:11 milker app/web.1:  Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:11 milker app/web.1:  Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:11 milker app/web.1:  Command :: convert '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' -auto-orient -resize "100x100>" '/tmp/3adPUTPPeg820140120-2-yc112820140120-2-k3pl9m' 
Jan 20 09:46:11 milker app/web.1:  Command :: file -b --mime '/tmp/3adPUTPPeg820140120-2-yc112820140120-2-k3pl9m' 
Jan 20 09:46:11 milker app/web.1:  Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1:  Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1:  Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1:  Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1:  Command :: convert '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' -auto-orient -resize "200x" -crop "200x200+0+33" +repage '/tmp/3adPUTPPeg820140120-2-yc112820140120-2-1acel98' 
Jan 20 09:46:12 milker app/web.1:  Command :: file -b --mime '/tmp/3adPUTPPeg820140120-2-yc112820140120-2-1acel98' 
Jan 20 09:46:12 milker app/web.1:  Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1:  Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1:  Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1:  Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1:  Command :: convert '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' -auto-orient -resize "300x300>" '/tmp/3adPUTPPeg820140120-2-yc112820140120-2-1fz8qbp' 
Jan 20 09:46:12 milker app/web.1:  Command :: file -b --mime '/tmp/3adPUTPPeg820140120-2-yc112820140120-2-1fz8qbp' 
Jan 20 09:46:12 milker app/web.1:  [paperclip] saving /users/avatars/000/000/007/original/3adPUTPPeg8.jpg 
Jan 20 09:46:13 milker heroku/router:  at=info method=POST path=/users host=milker.herokuapp.com request_id=97266e1a-098b-4676-9ad2-791e85d25f43 fwd="176.226.131.101" dyno=web.1 connect=14ms service=2457ms status=500 bytes=643 
Jan 20 09:46:13 milker app/web.1:  Completed 500 Internal Server Error in 1653ms 
Jan 20 09:46:13 milker app/web.1:  ArgumentError (missing required :bucket option): 
Jan 20 09:46:13 milker app/web.1:    app/controllers/users_controller.rb:28:in `create' 
2014-01-20 17:45:54+0000开始获得176.226.131.101的“/signup”
Jan 20 09:45:55 milker app/web.1:由UsersController处理#新为HTML
1月20日09:45:55挤奶器应用程序/web.1:呈现共享/_错误\u消息.html.erb(0.6ms)
Jan 20 09:45:55 milker app/web.1:布局/应用程序中的呈现用户/new.html.erb(164.7ms)
1月20日09:45:55挤奶器应用程序/web.1:渲染布局/_shim.html.erb(0.0ms)
1月20日09:45:55挤奶器应用程序/web.1:在199ms内完成200 OK(视图:168.1ms |活动记录:15.3ms)
1月20日09:46:11挤奶机应用程序/web.1:开始在2014-01-20 17:46:11+0000发布176.226.131.101的“/用户”
Jan 20 09:46:11 milker app/web.1:用户处理控制器#创建为HTML
Jan 20 09:46:11挤奶机应用程序/web.1:参数:{“utf8”=>“✓", "真实性令牌“=>”5KZg5kTVOWKN/VBFlw6BC5pJe1EGCBYtVN5zBXLXNT4=“,“用户”=>{“化身”=>,“姓名”=>“斜杠手”,“电子邮件”=>“斯拉瓦语”。proshechkin@softeica.ru“,“密码”=>“[筛选]”,“密码确认”=>“[筛选]”},“提交”=>“创建我的帐户”}
1月20日09:46:11挤奶机应用程序/web.1:Command::identify-格式“%wx%h,%[exif:orientation]”/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]'
1月20日09:46:11挤奶机应用程序/web.1:Command::identify-格式%m'/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]'
1月20日09:46:11挤奶机应用程序/web.1:Command::identify-格式%m'/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]'
1月20日09:46:11挤奶机应用程序/web.1:Command::identify-格式%m'/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]'
1月20日09:46:11挤奶机应用程序/web.1:Command::convert'/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]-自动定向-调整大小“100x100>”/tmp/3adPUTPPeg820140120-2-yc112820140120-2-k3pl9m'
1月20日09:46:11挤奶机应用程序/web.1:Command::file-b--mime'/tmp/3adPUTPPeg820140120-2-yc112820140120-2-k3pl9m'
1月20日09:46:11挤奶机应用程序/web.1:Command::identify-格式“%wx%h,%[exif:orientation]”/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]'
Jan 20 09:46:12挤奶机应用程序/web.1:Command::identify-格式%m'/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]'
Jan 20 09:46:12挤奶机应用程序/web.1:Command::identify-格式%m'/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]'
Jan 20 09:46:12挤奶机应用程序/web.1:Command::identify-格式%m'/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]'
1月20日09:46:12挤奶机应用程序/web.1:Command::convert'/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]-自动定向-调整“200x”大小-裁剪“200x200+0+33”+重新分页'/tmp/3adPUTPPeg820140120-2-yc112820140120-2-1acel98'
Jan 20 09:46:12 milker app/web.1:Command::file-b--mime'/tmp/3ADPUTPEG820140120-2-YC1112820140120-2-1acel98'
1月20日09:46:12挤奶机应用程序/web.1:命令::标识-格式“%wx%h,%[exif:orientation]”/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]'
Jan 20 09:46:12挤奶机应用程序/web.1:Command::identify-格式%m'/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]'
Jan 20 09:46:12挤奶机应用程序/web.1:Command::identify-格式%m'/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]'
Jan 20 09:46:12挤奶机应用程序/web.1:Command::identify-格式%m'/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]'
1月20日09:46:12挤奶机应用程序/web.1:Command::convert'/tmp/3adputpeg820140120-2-yc1128.jpg[0]-自动定向-调整大小“300x300>”/tmp/3adputpeg820140120-2-yc112820140120-2-1fz8qbp'
1月20日09:46:12挤奶机应用程序/web.1:Command::file-b--mime'/tmp/3adPUTPPeg820140120-2-yc112820140120-2-1fz8qbp'
1月20日09:46:12挤奶器应用程序/web.1:[纸夹]保存/users/avatars/000/000/007/original/3adPUTPPeg8.jpg
1月20日09:46:13 milker heroku/router:at=info method=POST path=/users host=milker.herokuapp.com请求_id=97266e1a-098b-4676-9ad2-791e85d25f43 fwd=“176.226.131.101”dyno=web.1 connect=14ms服务=2457ms状态=500字节=643
Jan 20 09:46:13 milker应用程序/web.1:在1653ms内完成500个内部服务器错误
Jan 20 09:46:13挤奶器应用程序/web.1:ArgumentError(缺少必需的:桶选项):
Jan 20 09:46:13 milker应用程序/web.1:app/controllers/users\u controller.rb:28:in'create'
有什么想法吗?
提前感谢您的代码

:bucket => ENV['BEQUEM'],
:access_key_id => ENV['AKredacted'],
:secret_access_key => ENV['AKredacted']
严格按照教程进行操作。它要求您添加:

:bucket => ENV['S3_BUCKET_NAME'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
这些是环境变量,将使用
heroku config
命令进行设置。您已经用实际值替换了这些值(并且通过在此处公开这些值可能会导致安全问题)

如本教程所述,从控制台运行以下命令:

$ heroku config:set S3_BUCKET_NAME=your_bucket_name
$ heroku config:set AWS_ACCESS_KEY_ID=your_access_key_id
$ heroku config:set AWS_SECRET_ACCESS_KEY=your_secret_access_key

不要忘了在此处用实际值替换
您的\u bucket\u name
等:)

关于manojild的回答,您需要做的是(我们以前遇到过这个问题):


型号

不知道为什么,但您必须在
回形针
型号中包含
:bucket
选项:

has_attached_file :image,
                :styles => { :medium => "x300", :thumb => "x100" },
                :default_url => "************",
                :storage => :s3,
                :bucket => 'bucket_name',
                :s3_credentials => S3_CREDENTIALS (we set this in an initializer)

环境变量

您正在
开发中使用
ENV
vars.rb

除非您在操作环境中实际设置了这些
VAR
s,否则您将无法访问它们。我建议在开发和生产中使用来处理环境变量,保持一致性

你真的希望你的环境变量是这样的:

:bucket => ENV['S3_BUCKET_NAME'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']

您将它们与当前工作用户模型中的实际内容一起使用。计划将来使用软呢帽

has_attached_file :avatar, :styles => { :small => '60x60#', :large => '300x300#' }, :default_style => :large,
  :storage => :s3,
  :default_url => '/images/:attachment/missing_:style.png',
  :path => "users/:id/avatar/:style.:extension",
  :bucket => "bequem",
  :s3_credentials => {
    :access_key_id => "xxx",
    :secret_access_key => "xxx"
  }

将其添加到模块和类中的application.rb文件中:

config.autoload_paths += %W(#{config.root}/lib)
config.before_configuration do
    env_file = File.join(Rails.root, 'config', 'local_env.yml')
    YAML.load(File.open(env_file)).each do |key, value|
        ENV[key.to_s] = value
    end if File.exists?(env_file)
end

你应该添加一些更多的信息,比如到目前为止你尝试了什么,失败的地方…等等
config.autoload_paths += %W(#{config.root}/lib)
config.before_configuration do
    env_file = File.join(Rails.root, 'config', 'local_env.yml')
    YAML.load(File.open(env_file)).each do |key, value|
        ENV[key.to_s] = value
    end if File.exists?(env_file)
end