【问题标题】:Rails, PaperClip, S3, Heroku: Model icon fields not being savedRails、PaperClip、S3、Heroku:模型图标字段未保存
【发布时间】:2012-10-25 20:59:26
【问题描述】:

我正在使用 Rails 3.2 + Heroku + S3 + Paperclip 在我的 User 模型上存储图标。该模型虽然没有保存 4 个图标字段。图像正在正确处理并保存在 S3 上,并且没有发生错误。我还有另一个模型,它有一个通过 Paperclip 和 S3 存储的文档。该模型在所有情况下都能完美运行。 User 图标在本地有效,但在 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

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

我很困惑,因为另一个模型工作正常。唯一真正的区别是User 附件进行图像处理,但该部分似乎工作正常。

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

想法?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 heroku amazon-s3 paperclip


    【解决方案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"
    

    【讨论】:

      猜你喜欢
      • 2012-12-30
      • 1970-01-01
      • 2014-01-18
      • 2011-12-09
      • 2012-09-23
      • 1970-01-01
      • 2015-10-29
      • 2012-02-22
      • 2013-02-02
      相关资源
      最近更新 更多