2

Я относительно новичок в рельсах. У меня был камень paperclip, который отлично работал в разработке на местном уровне, и пользователи без проблем загружали аватаров. Я развернулся к производству через Heroku, а также не ошибся при создании пользователей с загруженными изображениями при регистрации, но все загруженные изображения появились в виде недостающих эскизов на производстве. Я читал и, по-видимому, в производстве со скрепкой, я должен использовать что-то под названием Amazon S3 (поправьте меня, если есть лучший способ), поэтому я пытаюсь это сделать.Отсутствует ошибка региона при загрузке изображения с помощью paperclip gem Amazon S3

Здесь ошибка я получаю, когда я пытаюсь создать пользователь с загруженным изображением:

Aws::Errors::MissingRegionError in Devise::RegistrationsController#create 
missing region; use :region option or export region name to ENV['AWS_REGION'] 

здесь является то, что у меня есть в моей производственной и развитии среды

config.paperclip_defaults = { 
    storage: :s3, 
    s3_host_name: 's3-ap-southeast-1.amazonaws.com', 
    s3_credentials: { 
    bucket: ENV['AWS_S3_BUCKET'], 
    s3_region: ENV['S3_REGION'], 
    access_key_id: ENV['AWS_ACCESS_KEY_ID'], 
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'] 
    } 
} 

Здесь является то, что у меня в paperclip.rb инициализаторе

Paperclip::Attachment.default_options[:url] = ':s3_domain_url' 
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename' 


    Paperclip::Attachment.default_options[:s3_host_name] = 's3-ap-southeast-1.amazonaws.com' 

примечание (я на Ближнем востоке)

и вот что у меня есть в моей модели пользователя

#paperclip gem storing avatar images 


has_attached_file :avatar, 
      :bucket => 'bucket_name', 
      :styles => { 
      :thumb => ['100x100#', :jpg, :quality => 70], 
     :preview => ['480x480#', :jpg, :quality => 70], 
     :large => ['600>',  :jpg, :quality => 70], 
     :retina => ['1200>',  :jpg, :quality => 30] 
}, 
     :convert_options => { 
     :thumb => '-set colorspace sRGB -strip', 
     :preview => '-set colorspace sRGB -strip', 
     :large => '-set colorspace sRGB -strip', 
     :retina => '-set colorspace sRGB -strip -sharpen 0x0.5' 
} 

Я посмотрел на вопросы, касающиеся S3 Paperclip Gem и отсутствующими ошибку региона, но никогда не видел, как это изречение ошибка в контроллере DEViSE , Я думаю, это связано с тем, что связь между: аватаром с пользователем, который контролируется приложением, и у меня нет отдельного пользовательского контроллера.

Я чувствую, что должен быть более простой способ решить проблему отсутствия изображений в производстве с помощью скрепки скрепки, чем с использованием этой амазонки S3. Особенно, если все работает нормально и денди локально без Amazon S3. Любые альтернативные предложения? Идеи?

ответ

0

Вам не обязательно пользоваться услугами Amazon для хранения ваших изображений, но если вы размещаете на Heroku, вы не можете хранить его локально. Это связано с тем, что heroku использует эфемерную файловую систему, поэтому вы должны ожидать, что все, что вы храните локально, может исчезнуть в любой момент. Это упрощает работу, когда вам нужно масштабировать приложение, поскольку вы не полагаетесь на какое-либо местное хранилище, если вы создаете новые динамики (это также облегчает жизнь Heroku, поскольку им не нужно беспокоиться об общем хранилище, что все из динамиков приложения должны монтироваться).

Теперь вернемся к S3. Во-первых, у вас есть альтернативы, если вы используете драгоценный камень «туман» со скрепкой, вы можете получить доступ к number of storage providers относительно легко.

Тем не менее, S3 является наиболее распространенным, и ваша проблема должна быть легко разобрана путем определения переменной AWS_REGION. На Heroku вы можете сделать это, запустив следующее:

heroku config:set AWS_REGION=us-west-2 

Или в любом регионе, в котором вы работаете.

Кроме того, в последний раз я проверил скрепку не был совместим с AWS SDK 2, так что если у вас есть странные вопросы, вы можете попробовать переключиться обратно в SDK 1, используя это в Gemfile:

gem 'aws-sdk', '< 2.0' 
+0

Спасибо за информативный ответ и решение. Я последовал вашим советам и установил v1 aws и изменил все ссылки Aws на AWS и определил регион. Это фиксировало ошибку области, которую я получал, и заменил ее аналогичной ошибкой.NameError в Devise :: RegistrationsController # create uninitialized constant AWS :: S3 :: Resource –

+0

Эта новая ошибка также ссылается на контроллер регистрации приложений так же, как и на старую ошибку, что неудивительно, потому что ошибка возникает при попытке зарегистрироваться новый пользователь с загрузкой изображения. Я не создал контроллер регистрации. Вы бы рекомендовали создать контроллер регистрации для решения проблемы? –

+0

Это странно. Причиной ошибки является то, что AWS SDK v1 не имеет класса S3 :: Resource ... Я посмотрел, что произошло в источнике paperclip, и похоже, что они удалили тест на версию AWS SDK. Если вы перейдете на paperclip 4.3.0, все должно работать (он использует S3 :: Resource, только если версия SDK не v1, и я использую ее в одном из моих проектов успешно с S3). – taglia

Смежные вопросы