Ответ 1
Попробовал ли это обход?
Или даже этот?
Я использую:
Paperclip 2.3.16
Rails 3.0.9
Ruby 1.9.2
AWS - S3 0.6.2
Я пытаюсь использовать paperclip для загрузки в ведро ЕС (Ирландия). В моей модели есть следующее:
has_attached_file :image, :styles => { :grid => '90x128#', :list => '140x200#', :original => '400x548'},
:storage => :s3,
:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
:url => 'flyers/:id/:style/:basename.:extension',
:path => 'flyers/:id/:style/:basename.:extension',
:bucket => 'fsight'
В моей среде .rb Я установил запись для использования хоста по умолчанию AWS/s3 в соответствующий ЕС с помощью:
require "aws/s3"
AWS::S3::DEFAULT_HOST.replace "s3-eu-west-1.amazonaws.com"
Это прекрасно работает, и это позволяет мне загружать изображения, и я могу проверить загрузку/удаление изображения с помощью консоли AWS Management.
Однако при попытке отображения изображений на моем сайте возникает проблема. Изображения не загружаются, и я определил причину, так как генерируемый URL использует старый узел по умолчанию. Например:
Что это должно быть: https://s3-eu-west-1.amazonaws.com/fsight/flyers/50/full/4759543368588654950.jpg
Что это на самом деле: http://s3.amazonaws.com/fsight/flyers/50/full/4759543368588654950.jpg?1314801178
Как вы можете видеть, он использует старый хост по умолчанию.
Я попытался разместить:
Paperclip.interpolates(:s3_eu_url) do |att, style|
"#{att.s3_protocol}://s3-eu-west-1.amazonaws.com/#{att.bucket_name}/#{att.path(style)}"
end
Но затем начал получать следующую ошибку:
wrong number of arguments (0 for 1)
Extracted source (around line #9):
<img src= <%= @event.image.url(:original) %>
Я знаю, что у Паперклипа есть некоторые проблемы с использованием ведер ЕС, но может ли кто-нибудь помочь мне в этом?
Попробовал ли это обход?
Или даже этот?
Вам больше не нужно работать над проблемой ЕС.
Бэкэйн для aws-s3 по умолчанию в папке был заменен на AWS SDK для Ruby, что также рекомендуется использовать Amazon при работе с AWS.
Просто вставьте
gem 'aws-sdk'
в ваш Gemfile и запустите bundle install
.
Если вы хотите что-то вроде https://s3-eu-west-1.amazonaws.com/some_path_goes_here, попробуйте настроить модель has_attached_file
со следующими параметрами
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/s3.yml",
:s3_permissions => :private,
:s3_protocol => 'https',
:s3_host_name => 's3-eu-west-1.amazonaws.com',
:path => ":filename"
Если вы не хотите использовать https, вы можете удалить :s3_protocol
, и если вы хотите изменить регион, опция :s3_host_name
- это правильный путь. Вы также можете поместить это в файл конфигурации.
Надеюсь, что это поможет.
Я добавил
Paperclip::Attachment.default_options[:s3_host_name] = 's3-eu-west-1.amazonaws.com'
в paperclip.rb в папке инициализаторов, и он отлично работает для меня.
Здесь же проблема, просто решив передать следующий параметр has_attached_file:
:url => ':s3_domain_url'
Подробнее см. здесь http://rubydoc.info/gems/paperclip/Paperclip/Storage/S3:
Обычно это не имеет значения ни малейшим образом, и вы можете оставить значение по умолчанию (это стиль пути или: s3_path_url). Но в некоторых случаях пути не работают, и вам нужно использовать домен-стиль (: s3_domain_url).