麻布十番で働くデータ分析者のブログ

グロースハック、プログラミング、データ分析の色々を発信します

heroku × Railsでメディア運営をする(Cloudinary編)

f:id:nimi0370376:20170914012022j:plain

最近herokuを利用してメディアの運営を始めました。 Railsで作成して、herokuの無料プランで運営していく方針です。

その中で記事を投稿していくのですが、サムネイルの画像が消えてしまうという事態に陥ったので原因と解決方法を残しておきます。

herokuだと画像がアップロードできない

現象

herokuでデプロイ後に記事投稿を試みますが、画像がいつまでたっても表示されません。 もっと言えば、pushするたびに画像が消える…

これを解決しようと色々な方法を模索しました。

解決方法

qiita.com

まあこれですね。 簡単に説明するとherokuだとアップロード先を指定できてないので、外部のデータベースを用意してあげる必要があるらしいです。

ただし、AWSとかだとEC2なのですがherokuはなかなか難しい。

そこでCloudinaryが登場するわけです。 railsから簡単に設定できて、無料というのが嬉しいです。

heroku × Cloudinaryの使用方法

1. herokuにアドオンを追加

railsからアドオンをherokuに追加する必要があります。

$heroku addons:add cloudinary:starter

または、herokuのページから直接追加することも可能です。

f:id:nimi0370376:20170914012747p:plain

herokuのResourcesからいけます。 starterにしないと料金が発生するので注意してください。

また、ここでherokuにクレジットカードを追加してくれと言われることがあります。 基本的にお金はかからないと思うので追加しておいて大丈夫でしょう。

どうしても不安という方は、後から紹介するcloudinaryのストレージを確認しながら使用してください。

2. Cloudinaryを開いてymlをダウンロード

Cloudinaryをherokuから開くとdashboardに飛ぶと思います。 次にymlをダウンロードするのですが、これが非常にわかりにくいです。

f:id:nimi0370376:20170914013931p:plain

Account detailのところのYMLの文字をクリックすると自動的にダウンロードが始まります。

3. Railsから設定を行う

さあ、後もう少しです。

Railsのconfig 以下に先ほどのymlを入れます。

Config / cloudinary.ymlってことです。

---
development:
  cloud_name: abcdefgh
  api_key: '123456789'
  api_secret: xxxxxxxxxxxxxxxxx
  enhance_image_tag: true
  static_image_support: false
production:
  cloud_name: abcdefgh
  api_key: '123456789'
  api_secret: xxxxxxxxxxxxxxxxx
  enhance_image_tag: true
  static_image_support: true
test:
  cloud_name: abcdefgh
  api_key: '123456789'
  api_secret: xxxxxxxxxxxxxxxxx
  enhance_image_tag: true
  static_image_support: false

ちなみにcloud_nameとapi_keyとapi_secretはdashboardのところに書いてあります。

4. pushして利用

$ git add .
$ git commit -m "yml added"
$ git push heroku branch_name

いつもの奴を打ってください。

これで利用可能になります。 うまくアップロードできてるとcloudinaryのdashboardに画像と容量が表示されているはずです。 このcloudinaryかなり容量がありますので基本的には無料プランで大丈夫です。

f:id:nimi0370376:20170914014528p:plain

こんなのもありますので、もしピンチの時はシェアしてあげてください笑