Как использовать Sinatra, Datamapper, DM-Paperclip и S3? - PullRequest
3 голосов
/ 12 марта 2011

Обновление: Я перешел на CarrierWave (наконец-то он заработал), поэтому, хотя я все еще ценю ответы на этот вопрос, я не смогу попробовать, если они действительно работают с тех порЯ полностью удалил DM-Paperclip из своего кода.


Привет,

Я занимаюсь разработкой веб-приложения Sinatra с использованием DataMapper и сейчас собираюсь добавить несколькоФункция загрузки с S3 в качестве хранилища.Я пробовал CarrierWave , но я не мог заставить это работать, так что теперь я пытаюсь dm-paperclip.Вот что у меня сейчас:

Модель:

class Article
  include DataMapper::Resource
  include Paperclip::Resource

  property :id,                       Serial
  property :created_at,               DateTime
  property :updated_at,               DateTime
  property :title,                    String
  property :body,                     Text

  has_attached_file :screenshot,
                    :storage          => :s3,
                    :s3_credentials   => {
                      :access_key_id      => 'my-access-key-id',
                      :secret_access_key  => 'my-secret_access-key',
                      :bucket             => 'my-bucket'
                    },
                    :styles => {
                      :medium => "300x300>",
                      :thumb => "100x100>"
                    }
end

Контроллер:

post '/articles/create' do
  @article = Article.new
  @article.title        = params[:title]
  @article.body         = params[:body]
  @article.screenshot   = params[:screenshot]

  begin
    @article.save
  rescue DataMapper::SaveFailureError => e
    puts "Error saving article: #{e.to_s} validation: #{@article.errors.values.join(', ')}"
  rescue StandardError => e
    puts "Got an error trying to save the article #{e.to_s}"
  end

  redirect '/articles'
end

Тем не менее, когда я создаю новую статью, она ничего не сохраняет вмой S3 bucket и я тоже не получаю никаких ошибок.

Есть идеи, что я делаю неправильно?

Ответы [ 3 ]

2 голосов
/ 12 марта 2011

Эй! Пожалуйста, попробуйте мой форк: https://github.com/solnic/dm-paperclip, он включает в себя множество патчей, которые исправили некоторые проблемы с S3. В течение месяца или двух я выпущу его.

1 голос
/ 18 сентября 2012

Помимо уже опубликованных решений, я хотел бы добавить рекомендацию.

По моему опыту, использование функции DataMapper raise_on_save_failure не сильно помогает при отладке.Я рекомендую вам отключить эту функцию и использовать что-то вроде следующего кода:

if model.save then
    return model
  else
    error = String.new
    model.errors.each do |e|
      error << "#{e[0]}\n"
    end
    raise ArgumentError, error
  end

Таким образом, вы получите полное объяснение каждой проблемы, с которой DM столкнулся при попытке сохранить вашу модель.Я нахожу это очень полезным не только для отладки, но и для показа этих сообщений пользователям моего приложения.

0 голосов
/ 23 марта 2013

Некоторое время назад я разработал форк специально для S3. Мой форк работает с официальным AWS-SDK вместо старого aws-s3, который в основном устарел.

Если кто-то будет искать решение S3 для скрепки, то оно работает (сегодня)

https://github.com/krzak/dm-paperclip-s3

посмотрите readme, чтобы узнать, как настроить скрепку для S3

...