Rails4 carrierwave-dropboxでDropboxにファイルをアップロードする。
carrierwave-dropboxを使って、ファイルのアップロード先をDropbpxにします。
参考にしたサイト↓
hyperneetprogrammer.hatenablog.com
Dropbox側でアプリ作成
https://www.dropbox.com/developers/apps
ここにアクセスして、アプリを作成します。
画面右上の青いボタン「Create App」をクリック
必要な項目を入力
- 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 にチェック
必要な情報を確認
App key と App secret をメモする
Railsアプリ(サーバー)側で必要なgem類をインストール
imagemagickをインストール
Gemfileを編集
gem 'carrierwave-dropbox' gem 'mini_magick'
bundle install
する
アプリの認証をする
rake コマンドを実行
rake dropbox:authorize APP_KEY=<app_key> APP_SECRET=<app_secret> ACCESS_TYPE=app_folder
<app_key>、<app_secret>は先程メモしたものになります。
表示された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
とか答えると、まだだろって怒られるので注意してください。
Railsアプリ側の設定をする
参考にしてたサイトが定数管理する為に、figaroを使ってたので、使ってみます。
これなら、githubに情報が駄々漏れする事もないので安心です。
Gemfileを編集
gem 'figaro'
bundle install
するfigaro install
を実行
config/application.ymlが作成されます。
.gitignoreにも追加されます。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も文字列にしました。
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を作成
rails g uploader picture
を実行
ここでは、uploader名を picture とします。app/uploaders/picture_uploader.rbを編集
include CarrierWave::MiniMagick
のコメントを取る
storage :dropbox
storageを
:dropbox
にする参考にしてたサイトでは他にも色々書いてますが、とりあえず省きます。
ファイルをアップロードできるようにする
Modelを編集
class Item < ActiveRecord::Base mount_uploader :picture, PictureUploader end
:picture は、ファイルを扱うカラムになります。ここでは、itemsテーブルのpictureカラムを使用しています。
Viewsを編集
<div class="field"> <%= f.label :picture %> <%= f.file_field :picture %> </div>
おしまい
これでおしまいです。
アップロードされたファイルは(今回の設定ならば)、
Dropbox > アプリ > testapp > uploads > item > picture
の下に、保存されます。
carrierwaveでサーバーにファイル保存してたけど、Dropboxに移行しちゃった。
と言う場合もフォルダごとDropboxに移せば問題ありませんでした。
↑いいのかな?(笑)
そして、とっても重いです!!!!!!!!!!
読込がすっごい重いです。
重すぎて開発環境には向かないです。。。
重くならなかった人いたら教えてください。笑
以上です!