2013-11-20 3 views
3

Я слежу за рельсами 4 учебника на railstutorial.org. Я выполнил большинство из них, проект размещен на геройку, но теперь хочу добавить загрузку изображений в Amazon S3. Я следил за руководством на веб-сайте heroku, но не могу загрузить что-либо, чтобы загрузить его в мое ведро на S3 (Европа).рельсы 4 скрепка загрузить в amazon s3 не работает

Я использую скрепку 3.5.2.

Сообщение модели

has_attached_file :post_photo, 
        styles: { 
         thumb: '100x100>', 
         square: '200x200#', 
         medium: '300x300>' 
        }, 
        :storage => :s3, 
        :s3_credentials => { 
         :access_key_id => ENV['S3_KEY'], 
         :secret_access_key => ENV['S3_SECRET'] }, 
        :s3_protocol => "https", 
        :path => ":class/:id/:basename_:style.:extension", 
        :url => ':s3_eu_url', 
        :bucket => 'bucket_name' 

Сообщение Контроллер

def post_params 
    params.require(:post).permit(:post_photo, :user_username, :title, :comment, :location, :user_id) 
end 

конфигурации/Инициализаторы/Paperclip.rb

Paperclip.interpolates(:s3_eu_url) { |attachment, style| 
    "#{attachment.s3_protocol}://s3-eu-west-1.amazonaws.com/#{attachment.bucket_name}/#{attachment.path(style).gsub(%r{^/}, "")}" 
} 

конфигурации/environment.rb

require 'aws/s3' 
AWS::S3::DEFAULT_HOST = "s3-eu-west-1.amazonaws.com" 

конфигурации/среда/production.rb

# config/environments/production.rb 
    config.paperclip_defaults = { 
     :storage => :s3, 
     :s3_credentials => { 
      :bucket => ENV['S3_BUCKET_NAME'], 
      :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
      :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
     }, 
     :url => ':s3_eu_url', 
     :path => ":class/:id/:basename_:style.:extension" 
    } 
+0

Вы используете gem 'aws-sdk'? –

ответ

3

Итак, я получил эту работу (не с Европой S3, но это не должно вопрос) не имеет ничего в config/environments/production.rb - главным образом потому, что я использую переменные ENV, чтобы помочь контролировать, на каком ярусе я указываю, ключи API и т. д.

Вот моя конфигурация:

В config/environments/production.rb:

только стандартная конфигурация - ничего общего с скрепкой.

В config/initializers/paperclip.rb:

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

К выше, вы хотели бы добавить:

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

Тогда ваша Post модель должна иметь только иметь что-то вроде:

has_attached_file :post_photo, 
        styles: { 
         thumb: '100x100>', 
         square: '200x200#', 
         medium: '300x300>' 
        } 

Это может быть очевидно, но также убедитесь, что у вас есть aws-sdk в вашем Gemfile.

Дайте мне знать, если у вас есть вопросы. Я установил это довольно много раз и полностью помогу устранить неполадки. :)

+0

Да, я включил aws-sdk в свой gemfile, я внес изменения, и он по-прежнему не загружается в мое ведро. Кроме того, когда я запускаю журналы heroku, я не вижу сообщений об ошибках, связанных с загрузкой в ​​ведро, но я вижу, что файл обрабатывается приложением. – BON

+0

Это в производстве? Или местная среда? Кроме того, возможно, стоит переходить на уровень DEBUG, чтобы узнать, что еще может произойти. – CDub

+0

Извините за задержку в возвращении, я не смог посмотреть на это. Это когда я развертываю герою, так что, думаю, это производство? Я не уверен, как настроить учетные данные amazon для моей локальной среды.Должен ли я заменить ': s3_domain_url' на 's3-eu-west-1.amazonaws.com'? – BON

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