2

UserRails 3.2 + Heroku + S3 + Paperclipを使用して、モデルにアイコンを保存しています。ただし、モデルは4つのアイコンフィールドを保存していません。画像はS3で正しく処理および保存されており、エラーは発生していません。また、ペーパークリップと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"
  ...

コントローラコード:(私はBase64でエンコードされたファイルをAJAXしているので、このコードはちょっとおかしいです。)

  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に正しく保存されており、エラーは発生していません。この要点には、Herokuログからのコントローラーアクションの出力例があります。

他のモデルがうまく機能するので、私はかなり困惑しています。唯一の本当の違いは、User添付ファイルが画像処理を行うことですが、その部分は正常に機能しているように見えます。

問題はこれと同じですが、そこでの解決策は適用されません。

考え?

4

1 に答える 1

1

したがって、問題は、引数を含めない:path:urlと、URLとパスの両方にパラメーターを使用しようとすることです。実際の修正は:path、URLに加えてパラメーターを含めることです。

たとえば、ローカルと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-11-06T00:12:26.413 に答える