Загрузить изображение на S3 через Heroku с помощью скрепки

Я хочу загрузить изображение с iOS на S3 через Heroku скрепкой. Я использовал этот сайт как ссылку. https://devcenter.heroku.com/articles/paperclip-s3

Однако он возвращает код состояния ошибки: 500, заголовки. Я не уверен, в чем проблема. В ожидании ответа от вас.

#terminal
$heroku config:set S3_BUCKET_NAME="kenja.jp"
$heroku config:set AWS_ACCESS_KEY_ID=my_access_key_id
$heroku config:set AWS_SECRET_ACCESS_KEY=my_secret_access_key

#app/models/user.rb
has_attached_file :photo, 
  :styles => { medium: "300x300>", thumb: "100x100>" },
  :storage => :s3,
  :bucket => 'kenja.jp',
  :s3_permissions => :public,
  :url => ":s3_domain_url",
  :path => "/assets/photos/:id/:style/:basename.:extension",
  :s3_host_name => "s3-ap-northeast-1.amazonaws.com",
  :s3_credentials => :"#{Rails.root}/config/s3.yml"


#config/environments/staging.rb
config.paperclip_defaults = {
  :storage => :s3,
  :s3_credentials => {
    :bucket => ENV['kenja.jp'],
    :access_key_id => ENV['my_access_key_id'],
    :secret_access_key => ENV['my_secret_access_key']
  }
}


#config/paperclip.rb
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] ='/:class/:attachment/:id/:style.:extenstion'
Paperclip::Attachment.default_options[:s3_host_name] = 's3-ap-northeast-1.amazonaws.com'


#app/apis/v1/users.rb
  params do  
    requires :id, type:Integer
    requires :icon, type:Rack::Multipart::UploadedFile
  end
  post '/post_picture' do
    photo_file = ActionDispatch::Http::UploadedFile.new(params[:icon])
    @user = User.find(params[:id])
    @user.update(photo: photo_file)
    @user.photo
  end

Журналы

Я проверил логи heroku, там было сказано следующее.

2015-10-18T06:33:10.144859+00:00 app[web.1]:  app/apis/v1/users.rb:112:in `block (2 levels) in <class:Users>'
2015-10-18T06:33:10.144858+00:00 app[web.1]: NameError (uninitialized constant Paperclip::Storage::S3::AWS):
2015-10-18T06:33:10.128265+00:00 app[web.1]:  User Load (0.9ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 15]]

Эта ссылка сообщила мне, что мне нужно понизить версию aws-sdk. NameError (неинициализированная константа Paperclip :: Storage :: S3 :: AWS):

gem 'aws-sdk', '< 2.0'

person lalala    schedule 18.10.2015    source источник
comment
Что вы видите в своем журнале heroku?   -  person K M Rakibul Islam    schedule 18.10.2015
comment
Посмотрите, поможет ли вам принятый ответ этого сообщения: stackoverflow.com/questions/24356759/   -  person K M Rakibul Islam    schedule 18.10.2015


Ответы (1)


Вот твоя ошибка:

NameError (неинициализированная константа Paperclip :: Storage :: S3 :: AWS)

После просмотра в Интернете это в основном вызвано гемом aws-sdk v2, в котором не определен модуль AWS. Короче говоря, это означает, что Paperclip не может вызвать модуль, необходимый для сохранения данных в S3.

Обходной путь - понизить вашу aws-sdk версию до 1:

#Gemfile
gem 'aws-sdk', '< 2.0'

... однако, кому нравятся обходные пути?

Вы должны заставить его работать, если извлечете из _7 _ :

#Gemfile
gem "paperclip", git: "https://github.com/thoughtbot/paperclip.git", branch: "master"
person Richard Peck    schedule 18.10.2015