Paperclip選定の経緯
carrierwaveが良さそうだって検討したが、ドキュメント周りをうまく拾うことが出来なかったので断念した。
refileも良さそうだったんだけど、同じように設定で戸惑ったので断念した。
Paperclipの導入
https://github.com/thoughtbot/paperclip を参考に導入する。
Development環境で https://github.com/thoughtbot/paperclip#image-processor の通りに config/environments/development.rb に設定を書き込むのを忘れないようにしましょう。 動かないケースが有ります。
上記URL通りだと、本番にも影響してしまうので以下のように書いてもいいかもしれません。
Paperclip.options[:command_path] = "/usr/local/bin/"
Paperclip自体は、S3と連携しなくても動くので、DevelopmentでもS3に関係無く開発出来て便利です。
今回は画像だったので、バリデーションを次のように設定した。
validates_attachment_content_type :content, content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"]
S3連携
Uploading Files to S3 in Ruby with Paperclip を参考に設定を行った。実際にはs3に media.yoneapp.com のようにドメインを当てていたので、このドキュメント通りには事が進まなかった。
最終的には次のような設定を行った。url
が理解しにくかったのだが https://github.com/thoughtbot/paperclip/blob/95acf3b898bd782f4429d42fd2d8812505390328/lib/paperclip/storage/s3.rb#L159 にあるように実際のurl
ではなくurl
の構成方法を決めるパラメータのようです。
config.paperclip_defaults = {
storage: :s3,
s3_credentials: {
access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
s3_region: "ap-northeast-1",
bucket: "media.yoneapp.com",
},
s3_host_alias: "media.yoneapp.com",
path: "/:class/:attachment/:id_partition/:style/:filename",
url: ":s3_alias_url",
s3_protocol: "https"
}
またpath
を設定せず:s3_alias_url
を指定するとPaperclip::Errors::InfiniteInterpolationError
が発生する。