2011-03-12 85 views
3

更新:我已经切换到CarrierWave(终于得到它的工作),所以虽然我仍然欣赏这个问题的答案,我将无法尝试,如果他们真的工作,因为我已经完全删除DM-回形针从我的代码。如何使用Sinatra,Datamapper,DM-Paperclip和S3?


那里嗨,

我正在开发使用DataMapper的一个西纳特拉,web应用,并正在寻求与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存储和我不也不会有任何错误。

任何想法我做错了什么?

回答

2

嘿!请尝试我的分支:https://github.com/solnic/dm-paperclip它包含许多已修复S3的问题。一两个月内我会发布它。

+0

配置回形针抛出一个错误: “未初始化的常量ActiveSupport :: Inflector”(我没有使用ActiveSupport) – Marc 2011-03-13 12:45:47

+0

好的,我会更新它,所以它不需要ActiveSupport。 – solnic 2011-03-14 13:11:24

1

除了已经发布的解决方案之外,我想添加一个推荐。

根据我的经验,使用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

前一段时间我特意为S3做了叉子。我的分支与官方的AWS-SDK一起工作,而不是旧的aws-s3,它大多是过时的。

如果有人将搜索的回形针S3的解决方案,这是一个工作(今天)

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

看看自述获得如何为S3

相关问题