CarrirWaveでgoogle cloud strageにファイルアップロードする
railsで画像ファイルをアップロードするときに CarrirWave
を使うことはよくあると思うのだけれど、今回そのアップロード先に使ってみたかったgoogle clowd strage
を選択した。
AWSのs3についての記事はたくさんあるものの、google clowd strage
についての日本語の記事があまりなく、英語が拙い自分にとってはつらかったのでメモ
基本的に参考した記事はこれ http://www.codediode.io/lessons/8223-upload-files-to-google-cloud-storage-with-carrierwave
上の通りにやっていけば基本的に問題ないはずなのだが、なにせ英語、、、
まずはgemを入れる
gem 'carrierwave' gem 'mini_magick' gem 'fog'
carriewave
はご存知画像アップロードのためのgem、 mini_magick
は画像のリサイズなどを行なってくれる。fog
というgemはクラウドサービス向けのgemでcarriewave
と組み合わせるとアップロードの向き先を AWS
やGoogle Compute Engine
などに出来たりする。
carriewave
のリポジトリには fog-google
というgemを使うよう書いてあるのだが、fog
でも普通に動いた。
https://github.com/carrierwaveuploader/carrierwave#user-content-using-google-storage-for-developers
googleのAPIキーを設定する
development: google_storage_access_key_id: "HOGEHOGE-ID" google_storage_secret_access_key: "HOGEHOGE-SECRET"
ここのkeyとidがいったいどこのなんの値を入れればよいのか、全然わからなかった。
いろいろいじって見たところ、
の「設定」から
「相互運用性」のタブをクリックし、その中で相互運用アクセスを許可するとアクセスキーと非公開というものが発行される。(キャプチャは相互運用アクセスの設定済みのもの)
このアクセスキーがidで非公開がsecretとなる。(まあsecretは非公開なのだが、わかりにくい、、、)
ただ僕の場合はsecret.yml
にキーをベタで書くのが嫌だったので
Railsで環境変数をライトに使う - MIKAZUKI 開発者ブログ
のように環境変数を使うようにした。
development: google_storage_access_key_id: ENV["GOOGLE_STORAGE_ACCESS_KEY_ID"] google_storage_secret_access_key: ENV["GOOGLE_STORAGE_SECRET_ACCESS_KEY"]
#gemが必要 GOOGLE_STORAGE_ACCESS_KEY_ID = "hogehoge_id" #相互運用性のアクセスキー GOOGLE_STORAGE_SECRET_ACCESS_KEY = "hogehoge_secret" #相互運用性の非公開
あとは http://www.codediode.io/lessons/8223-upload-files-to-google-cloud-storage-with-carrierwave の通り進めていけばオーケー
model と uploader を作成する
$ rails g model Image name:string file:string
$ rails g uploader Image
class Image < ActiveRecord::Base mount_uploader :file, ImageUploader end
strageをfogに設定
class ImageUploader < CarrierWave::Uploader::Base storage :fog end
設定ファイルの記述
CarrierWave.configure do |config| config.fog_credentials = { :provider => 'Google', :google_storage_access_key_id => Rails.application.secrets.google_storage_access_key_id, :google_storage_secret_access_key => Rails.application.secrets.google_storage_secret_access_key } config.fog_directory = 'hogehoge-bucket' #GCEのbucketの名前 end
これで設定は完了。
僕の場合はAPIで使いたかったのでviewは用意していなかったが、上で紹介した参考サイトにviewのサンプルもあるので画面から登録する場合はそちらを参考にして欲しい。
ちかれた