2012-11-05 56 views
2

我正在使用Rails 3.2 + Heroku + S3 +回形针在我的User模型上存储图标。尽管模型没有保存4个图标字段。图像被正确处理并保存在S3上,并且没有发生错误。我还有另一个模型,通过Paperclip和S3存储文档。该模型在所有情况下都可以完美运行User图标适用于本地,但不适用于Heroku。Rails,PaperClip,S3,Heroku:不保存模型图标字段

production.rb相关配置

config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_credentials => { 
    :bucket => ENV['AWS_BUCKET'], 
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
    } 
} 

用户模型代码:

class User < ActiveRecord::Base 
    attr_accessible :icon 

    has_attached_file :icon, :url => "/system/:rails_env/:attachment/:style/:hash.:extension", 
    :hash_data => ":class/:attachment/:id", 
    :hash_secret => "superSecretThing", 
    :styles => { :medium => "300x300>", :thumb => "100x100>" }, 
    :default_url => "/blank.png" 
    ... 

控制器代码:(此代码是一种疯狂,因为我AJAXing文件Base64编码)

params[:user][:icon_data] 
    decoded_file = Base64.decode64(data) 
    begin 
    split_name = params[:user][:icon_file_name].split(".") 
    file = Tempfile.new([split_name[0..-2].join("."), ".#{split_name[-1]}"]) 
    file.binmode 
    file.write(decoded_file) 
    file.close 
    @user.icon = open(file) 
    @user.icon_file_name = params[:user][:icon_file_name] 
    ensure 
    file.unlink 
    end 
    @user.save 

我使用Paperclip attac在另一个模型上做了几乎完全相同的过程并且它完美地工作。在这两种情况下,附件都被正确保存到S3中,并且不会引发错误。用于Heroku日志中的控制器操作的This gist has example output

我很困惑,因为其他模型工作正常。唯一真正的区别在于User附件执行图像处理,但该部分似乎工作正常。

问题与this one相同,但该解决方案不适用。

想法?

回答

1

所以问题是不包括:path参数使它尝试使用:url参数为url和路径。真正的解决方法是除了url之外还包括:path参数。

因此,例如,固定配置的作品在本地和在Heroku:

has_attached_file :icon, 
    :url => "/system/:rails_env/:attachment/:style/:hash.:extension", 
    :path => "public/system/:rails_env/:attachment/:style/:hash.:extension", 
    :hash_data => ":class/:attachment/:id", 
    :hash_secret => "superDuperSecret", 
    :styles => { :medium => "300x300>", :thumb => "100x100>" }, 
    :default_url => "/blank.png" 
相关问题