Rails 3.29/Heroku/Mongoid環境に画像アップロードの実装するために、「CarrierWave」を利用しました。その一連の流れを忘備録で書いておきます。
🗻 CarrierWaveって何?
CarrierWaveは、シンプルで柔軟性の高いファイルアップロードアプリケーションです。
Ruby on RailsなどのRackベースのアプリケーションに組み込めます。
競合のGemとしては、「Paperclip」が挙げられます。現時点ではPaperclipのほうが人気は高いですが、扱いやすくて負けないくらい多機能です。
🐯 Mongoid + ImageMagickのインストール
もし、MacでMongoDBのインストールがまだの場合は、 MongodbをHomebrew/Mac Lionでインストール」 を良かったら見てください。
続いて、CarrierWaveを動かすために、ローカルテスト用にImageMagickをインストール(Mac Homebrewの場合)。
brew install ImageMagick |
🐞 Rails プロジェクト作成
プロジェクトを作成する。今回はmongoidを利用するので、ActiveRecordをスキップ(-Oオプションを付ける)する。
rails new test-app --skip-test-unit -O |
Gitリポジトリ作成を作成します。
Git init |
Gemfileファイルに以下のGemを追加
ruby '1.9.3' |
Gemfileの設定を反映。
bundle install |
🎃 mongoDBに接続するための設定を作成
rails generate mongoid:config |
config/mongoid.ymlでProductionの設定をします。
こちらは後で使うHeroku アドオンMongoLab用の設定です。
production: |
🐰 Carrierwaveの設定
application.rbの更新。
CarrierWave.configure do |config| |
🐠 アップローダ/Scaffoldの修正
アップローダのひな型の生成。
rails g scaffold article title:string |
モデルファイル「app/model/article.rb」に以下を追加。
include Mongoid::Timestamps |
アップローダファイル「app/uploader/thumbnail_uploader.rb」の修正。
require "digest/md5" |
コントローラファイル「add/controller/articles_controller.rb」の修正。
class ApplicationController < ActionController::Base |
Viewファイル「app/views/articles/_form.html.haml」の修正。
= image_tag( @article.thumbnail_url ) if @article.thumbnail? |
Viewファイル「app/views/pages/show.html.haml」の修正。
vim app/views/pages/show.html.haml
= image_tag( @article.thumbnail_url(:mini)) |
routeファイルを修正。
root :to => "articles#index" |
😀 HerokuにPush
今回はHerokuとMongoDBのアドオン”MongoLab”を追加します。
git add -A |
MongoLabのAddonを追加。
Heroku addons:add mongolab:starter |
結果をブラウザで確認。
🏈 補足
Mongoidは2.xx系と3.xx系でかなり設定方法が変更されています。
当初3.xx系で組み込みに挑戦しましたが、DBからのimage取得周りでどうしても手詰まりになり、
2.xx系を使った形にしています。技術力&知識がついたら3.xx系で再チャレンジしたいと思っています!
🐝 Special Thanks
Rails3での画像アップロードの実装(ImageMagick + Rmagick + file_column)
[Rails] file_column から CarrierWave へ (序)
jnicklas / carrierwave-mongoid GitHub
😸 テスト環境
# OS : Mac Lion(OS X 10.7) # Rails : 3.2.9 # ImageMagic : 6.7.7-6.lion # Gem Rmagick : 2.13.1 # Gem carrierwave : 0.6.2 # Gem mongoid : 2.4.12 # Gem carrierwave-mongoid : 0.2.1