MIKAZUKI 開発者ブログ

MIKAZUKI で開発を進める上で見つけた気づきやノウハウをお伝えするテックブログです。

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と組み合わせるとアップロードの向き先を AWSGoogle Compute Engine などに出来たりする。

carriewaveリポジトリには fog-google というgemを使うよう書いてあるのだが、fogでも普通に動いた。 https://github.com/carrierwaveuploader/carrierwave#user-content-using-google-storage-for-developers

googleAPIキーを設定する

development:
google_storage_access_key_id: "HOGEHOGE-ID"
google_storage_secret_access_key: "HOGEHOGE-SECRET"

ここのkeyとidがいったいどこのなんの値を入れればよいのか、全然わからなかった。

いろいろいじって見たところ、 スクリーンショット 2015-09-15 9.03.09.png

の「設定」から

スクリーンショット 2015-09-15 9.05.04.png

「相互運用性」のタブをクリックし、その中で相互運用アクセスを許可するとアクセスキーと非公開というものが発行される。(キャプチャは相互運用アクセスの設定済みのもの)

このアクセスキーが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のサンプルもあるので画面から登録する場合はそちらを参考にして欲しい。

ちかれた