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

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

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

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

gumiの決算を読む

f:id:nimi0370376:20170912000053p:plain

 

本日発表されたgumiの決算を読んで色々考察があるので、ブログにまとめておきたいと思います。

 

gumiは、ソーシャルゲームを事業の軸としており、他には投資事業やVR事業などに注力しているようです。

 

この話ものちに書きたいと思います。

続きを読む

manifes2017に参加しました(MalbolgeとJuliaについて)

f:id:nimi0370376:20170910224808p:plain

Career Selectさん主催のmanifes2017というイベントに参加してきましたー

このイベント自身Facebookの他の人の投稿で知って、エンジニアリングが好きなこともあり参加させていただきました。

 

登壇者は、学生と企業のエンジニアたちでした。基本的に学生が表彰対象となり、各々のマニアックな技術を披露するというものでした。

 

今回は、せっかく参加したので学生さんと企業さんで一つずつ気になったものを紹介したいと思います。

 

 

ちなみに会場は株式会社LIFULLさんでした。

 

f:id:nimi0370376:20170910225529j:plain

 

続きを読む

組織の毒薬の学びが深かったので紹介

 

 

サイバーエージェント社の取締役である日高氏による著書「組織の毒薬」について紹介したいと思う。

 

そもそもこの本は、サイバーエージェントソーシャルゲーム事業を率いてた日高氏が社員に向けて書いたブログが元となっている。

 

エッセイのように読みやすく、1つのエピソードが2ページほどなので自分の中で咀嚼しながら読み進めることができる。

 

その中でいくつか学びがあったので紹介したいと思う。

続きを読む

アプリ研究No.6 pickme

f:id:nimi0370376:20170902002721j:plain

 

最近Pythonの事ばかり書いていたので、たまにはマーケティング関連のことも考察していきたいと思います。

 

2017年9月1日にリリースされた同級生専門SNS「pick me」について考察したいと思います。

 

どんなアプリで、どんな風にグロースするのか、どんな風にマネタイズしていくかを考察します。あくまで考察になるので、一個人の意見として受け止めていただけると幸いです。

 

続きを読む

PythonでFF14のデータベースAPIを叩く

おそらく誰も使わないであろうFF14のデータベースAPI

 

github.com

 

 日本のドキュメントが全くといって良いほどなかったので、一応残しておきます。

今回は、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ができない件

f:id:nimi0370376:20170805001112p:plain
なぜかできないので備忘録として記録しておく。

'''
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()


普通に/usr/ならできる。
でも、同じディレクトリに別のpythonファイルがあるとエラーが出てグラフがかけない。