思い付くまでタイトル未定

RubyとかRailsとかももクロちゃんとか色々な事書きます。

Rails4 carrierwave-dropboxでDropboxにファイルをアップロードする。

carrierwave-dropboxを使って、ファイルのアップロード先をDropbpxにします。

参考にしたサイト↓
hyperneetprogrammer.hatenablog.com

Dropbox側でアプリ作成

https://www.dropbox.com/developers/apps
ここにアクセスして、アプリを作成します。

  1. 画面右上の青いボタン「Create App」をクリック
    f:id:kanahebiZ:20150819160949p:plain

  2. 必要な項目を入力

    • What type of app do you want to create? は Dropbox API app を選択
    • Can your app be limited to its own folder? は Yes を選択
    • Provide an app name, and you're on your way. は 好きなアプリ名を入力
      ここでは、 testapp としています。
    • Terms of Service の I agree to Dropbox API Terms and Conditions にチェック

    f:id:kanahebiZ:20150819161241p:plain

  3. 必要な情報を確認
    App key と App secret をメモする

Railsアプリ(サーバー)側で必要なgem類をインストール

  1. imagemagickをインストール

  2. Gemfileを編集

     gem 'carrierwave-dropbox'
     gem 'mini_magick'
    
  3. bundle install する

アプリの認証をする

  1. rake コマンドを実行

     rake dropbox:authorize APP_KEY=<app_key> APP_SECRET=<app_secret> ACCESS_TYPE=app_folder
    

<app_key>、<app_secret>は先程メモしたものになります。

  1. 表示されたURLにアクセス、「許可」をクリック

     Visit this URL: https://www.dropbox.com/1/oauth/authorize?oauth_token=<oauth_token>
     And after you approved the authorization confirm it here (y/n):
    

認証する前に、yとか答えると、まだだろって怒られるので注意してください。

  1. 必要な情報を確認
    access_token と access_token_secret と user_id をメモする

Railsアプリ側の設定をする

参考にしてたサイトが定数管理する為に、figaroを使ってたので、使ってみます。
これなら、githubに情報が駄々漏れする事もないので安心です。

  1. Gemfileを編集

     gem 'figaro'  
    
  2. bundle installする

  3. figaro installを実行
    config/application.ymlが作成されます。
    .gitignoreにも追加されます。

  4. config/application.ymlを編集

     APP_KEY: <app_key>
     APP_SECRET: <app_secret>
     ACCESS_TOKEN: <access_token>
     ACCESS_TOKEN_SECRET: <access_token_secret>
     USER_ID: <user_id>
    

    警告が出るらしいので、user_idも文字列にしました。

  5. config/initializers/carrierwave.rbを新規作成

     CarrierWave.configure do |config|
       config.dropbox_app_key = ENV["APP_KEY"]
       config.dropbox_app_secret = ENV["APP_SECRET"]
       config.dropbox_access_token = ENV["ACCESS_TOKEN"]
       config.dropbox_access_token_secret = ENV["ACCESS_TOKEN_SECRET"]
       config.dropbox_user_id = ENV["USER_ID"]
       config.dropbox_access_type = "app_folder"
     end
    

Uploaderを作成

  1. rails g uploader pictureを実行
    ここでは、uploader名を picture とします。

  2. app/uploaders/picture_uploader.rbを編集

     include CarrierWave::MiniMagick
    

    のコメントを取る

     storage :dropbox
    

    storageを:dropboxにする

    参考にしてたサイトでは他にも色々書いてますが、とりあえず省きます。

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

  1. Modelを編集

     class Item < ActiveRecord::Base
        mount_uploader :picture, PictureUploader
     end
    

    :picture は、ファイルを扱うカラムになります。ここでは、itemsテーブルのpictureカラムを使用しています。

  2. Viewsを編集

     <div class="field">
       <%= f.label :picture %>
       <%= f.file_field :picture %>
     </div>
    

おしまい

これでおしまいです。
アップロードされたファイルは(今回の設定ならば)、
Dropbox > アプリ > testapp > uploads > item > picture
の下に、保存されます。

carrierwaveでサーバーにファイル保存してたけど、Dropboxに移行しちゃった。
と言う場合もフォルダごとDropboxに移せば問題ありませんでした。
↑いいのかな?(笑)

そして、とっても重いです!!!!!!!!!!
読込がすっごい重いです。
重すぎて開発環境には向かないです。。。
重くならなかった人いたら教えてください。笑

以上です!