2007/02/14

file_column and capistrano

Railsで画像ファイルをアップロードする場合、file_columnというプラグインがとても使えます。

このpluginは、画像のアップロード、保存、サムネイル作成といった面倒な処理を劇的に簡略化してくれます。


データベースにファイル名を保存するカラムを追加し、

add_column :entry, :image, :string


モデルで、file_column pluginを指定します。

class Entry < ActiveRecord::Base
file_column :image
end



この場合の保存先は、

public/[model_name]/[attribute_name]/[id]/[file_name].jpg

になります。


サムネイルを作成する場合は、次のようにします。

class Entry < ActiveRecord::Base
file_column :image,
:magick => {
:versions => {
:thumb => "50x50",
:midle => "100x100",
:large => "800x600"
}
}
end



この場合はそれぞれ、

public/[model_name]/[attribute_name]/[id]/[file_name].jpg

public/[model_name]/[attribute_name]/[id]/thumb/[file_name].jpg

public/[model_name]/[attribute_name]/[id]/midle/[file_name].jpg

public/[model_name]/[attribute_name]/[id]/large/[file_name].jpg

に保存されます。


ファイルをアップロードするには以下のhelperを使用します。

<%= file_column_field "entry", "image" %>


アップロードした画像を表示するには、以下のhelperを使用します。

<%= url_for_file_column "entry", "image" %>



サムネイルを表示するには、

<%= url_for_file_column "entry", "image", "thumb" %>




上記のように簡単に、非常に簡単に画像処理を扱えるようになるわけですが、capistranoでデプロイしている場合、画像の保存先がデフォルトのままだと、デプロイするたびに画像ファイルをコピーしなければなりません。

これではあんまりですが、ちゃんと回避策がありました。

file_columnのオプションに、root_pathというのがありまして、デフォルトの保存先を変更できます。

以下のように、capistranoが自動でリンクしてくれるsystemディレクトリに画像を保存するように指定すれば、いちいちコピーしなくてもよさそうです。

class Entry < ActiveRecord::Base
file_column :image,
:magick => {
:versions => {
:thumb => "50x50",
:midle => "100x100",
:large => "800x600"
}
},
:web_root => "system/files/",
:root_path => File.join(RAILS_ROOT, "public", "system", "files")
end




参考:

HowToUseFileColumn

0 件のコメント: