heroku × Railsでメディア運営をする(Cloudinary編)
最近herokuを利用してメディアの運営を始めました。 Railsで作成して、herokuの無料プランで運営していく方針です。
その中で記事を投稿していくのですが、サムネイルの画像が消えてしまうという事態に陥ったので原因と解決方法を残しておきます。
herokuだと画像がアップロードできない
現象
herokuでデプロイ後に記事投稿を試みますが、画像がいつまでたっても表示されません。 もっと言えば、pushするたびに画像が消える…
これを解決しようと色々な方法を模索しました。
解決方法
まあこれですね。 簡単に説明するとherokuだとアップロード先を指定できてないので、外部のデータベースを用意してあげる必要があるらしいです。
ただし、AWSとかだとEC2なのですがherokuはなかなか難しい。
そこでCloudinaryが登場するわけです。 railsから簡単に設定できて、無料というのが嬉しいです。
heroku × Cloudinaryの使用方法
1. herokuにアドオンを追加
railsからアドオンをherokuに追加する必要があります。
$heroku addons:add cloudinary:starter
または、herokuのページから直接追加することも可能です。
herokuのResourcesからいけます。 starterにしないと料金が発生するので注意してください。
また、ここでherokuにクレジットカードを追加してくれと言われることがあります。 基本的にお金はかからないと思うので追加しておいて大丈夫でしょう。
どうしても不安という方は、後から紹介するcloudinaryのストレージを確認しながら使用してください。
2. Cloudinaryを開いてymlをダウンロード
Cloudinaryをherokuから開くとdashboardに飛ぶと思います。 次にymlをダウンロードするのですが、これが非常にわかりにくいです。
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かなり容量がありますので基本的には無料プランで大丈夫です。
こんなのもありますので、もしピンチの時はシェアしてあげてください笑
組織の毒薬の学びが深かったので紹介
組織の毒薬 サイバーエージェント副社長の社員にあてたコラム (NewsPicks Book)
- 作者: 日高裕介
- 出版社/メーカー: 幻冬舎
- 発売日: 2017/08/30
- メディア: 単行本
- この商品を含むブログを見る
サイバーエージェント社の取締役である日高氏による著書「組織の毒薬」について紹介したいと思う。
そもそもこの本は、サイバーエージェントのソーシャルゲーム事業を率いてた日高氏が社員に向けて書いたブログが元となっている。
エッセイのように読みやすく、1つのエピソードが2ページほどなので自分の中で咀嚼しながら読み進めることができる。
その中でいくつか学びがあったので紹介したいと思う。
続きを読むPythonでFF14のデータベースAPIを叩く
日本のドキュメントが全くといって良いほどなかったので、一応残しておきます。
今回は、Pythonのurllibを利用して取っています。
# モジュールの読み込み import urllib.request import json import csv # URLの基本部 base_url = 'https://api.xivdb.com/quest/' # クエストの番号でループを回す for i in range(65644,65735): target_url = base_url + str(i) + '?language=ja' response = urllib.request.urlopen(target_url) content = json.loads(response.read().decode('utf8')) print(content) with open('quest.csv', 'w') as f: writer = csv.writer(f, lineterminator='\n') writer.writerow(content)
csvの書き込みが多分微妙なので、綺麗に書き込める方法知っている方いたら教えてください。
Python3でmatplotlib.pyplotができない件
なぜかできないので備忘録として記録しておく。
''' Simple plot using pyplot ''' import matplotlib.pyplot as plt def create_graph(): nyc_temp_2000 = [31.3,37.3,47.2,51.0,63.5,71.3,72.3,72.7,66.0,57.0,45.3,31.1] nyc_temp_2006 = [40.9,35.7,43.1,55.7,63.1,71.0,77.9,75.8,66.6,56.2,51.9,43.6] nyc_temp_2012 = [37.3,40.9,50.9,54.8,65.1,71.0,78.8,76.7,68.8,58.0,43.9,41.5] months = range(1,13) plt.legend([2000,2006,2012]) plt.title('Average monthly temperature in NYC') plt.xlabel('Month') plt.ylabel('Temperature') plt.plot(months,nyc_temp_2000,months,nyc_temp_2006,months,nyc_temp_2012) plt.show() if __name__ == '__main__': create_graph()