6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

rails_adminからファイルをアップロードできるようにする

Last updated at Posted at 2015-09-12

概要

開発者以外(=サーバへのデプロイ権限がない)が、Railsアプリからファイルをアップロードできるようにしたい。
すでにrail_adminはセットアップ済みなので、ここからファイル操作ができるようにいじってみる。

今回、アップロードプラグインはcarrierwaveを使う。
また、Heroku環境だと再起動のタイミングで保存したファイルが消えてしまうらしいので、Herokuには保存せず外部ストレージ(Cloudinary)を利用する。

環境

$ ruby -v; rails -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-darwin14]
Rails 4.2.1

パッケージインストール

Gemfile追記

$ vim Gemfile
gem 'carrierwave'
gem 'cloudinary'

インストール

$ bundle install

アップローダー設定

作成

$ rails g uploader Cafemenu
      create  app/uploaders/cafemenu_uploader.rb

各種設定

$ vim app/uploaders/cafemenu_uploader.rb
# cloudinary(後で設定)をインクルード
include Cloudinary::CarrierWave

# いらない設定はコメントアウト
  # storage :file
  # storage :fog
  # def store_dir
  #   "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  # end

# アップロードファイルをpdfに限定
  def extension_white_list
    %w(pdf)
  end

モデル設定

作成

$ rails g model cafemenu name:string file:string
      invoke  active_record
      create    db/migrate/20150911162123_create_cafemenus.rb
      create    app/models/cafemenu.rb
      invoke    rspec
      create      spec/models/cafemenu_spec.rb

アップローダーにマウント&ついでにバリデーション設定

$ vim app/models/cafemenu.rb
class Cafemenu < ActiveRecord::Base
  mount_uploader :file, CafemenuUploader
  
  validates :name, :presense => true
  validates :file, :presense => true
end

マイグレーション

$ rake db:migrate

Cloudinary対応

インストール(herokuダッシュボードからでも追加できる)
ひとまず無料プランで。

$ heroku addons:add cloudinary:starter

herokuダッシュボードのアドオンのリンクから、Cloudinaryのページに遷移する

アプリケーションの種類(今回はRails)を選択
cloudinary01

その後はマニュアル通りに設定すればOK

※ 通常は、以下のとおりにconfigディレクトリ配下にcloudinary.ymlを作成する

# 例(実際の値はCloudinaryから確認する必要がある)
production:
  cloud_name: "sample"
  api_key: "874837483274837"
  api_secret: "a676b67565c6767a6767d6767f676fe1"

・・・が、今回はherokuへのデプロイなので以下の環境変数の設定だけでOK

# 例(実際の値はCloudinaryから確認する必要がある)
CLOUDINARY_URL=cloudinary://874837483274837:a676b67565c6767a6767d6767f676fe1@sample

rails_admin設定

rails_adminからCafememuモデルの変数を操作できるよう、設定を追加する

$ vim config/initializers/rails_admin.rb
  config.model 'Cafemenu' do
    edit do
      field :name, :string
      field :file, :carrierwave
    end
  end

動作確認

ローカルで動作を確認してみる
(ここでは、アップロード確認用にステージング環境のCloudinaryを利用している)
ローカルで確認するときにも、CLOUDINARY_URLの環境変数を設定するのを忘れないように!

$ CLOUDINARY_URL=*** rails s

うまく設定ができていれば、以下のようにrails_adminからファイルアップロードができる
cloudinary02

成功すれば、リストにも追加される。
cloudinary03

Cloudinaryのサイトを確認すると、先ほどアップロードしたファイルを確認できるはずヽ(`▽´)/
cloudinary04

参考資料

Home · sferik/rails_admin Wiki
Cloudinary + Carrierwave + Heroku + Railsでの画像を手軽に利用する方法 - Qiita
carrierwave + rails 4.1 画像アップローダー - 酒と泪とRubyとRailsと

6
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?