めるノート

一児の母 兼 へっぽこWebエンジニアの内省ノート

Ruby(Sinatra)とHerokuでTwitterbotを作るときに、tokenがリポジトリ内に残らないようにした

最近お仕事でしかコードを触っていなかったので、リハビリがてらサクッとできそうなやつを作りました。

f:id:c5meg1012:20170802173032p:plain

表題の方法については、以下の記事をそのまま試しただけなので、ご参照下さい。

http://b0npu.hatenablog.com/entry/2016/06/15/230101

今回、Herokuだけではなく GitHubにもコードを乗っけたかったので、アクセストークンとかをべた書きではなく.envでの管理にしました。

その方法について、備忘録を書きます。

まず、ルートディレクトリに.envを作成します。
中身はこんな感じ。

CONSUMER_KEY="xxxxxxxx"
CONSUMER_SECRET="xxxxxxxx"
ACCESS_TOKEN_KEY="xxxxxxx"
ACCESS_TOKEN_SECRET="xxxxxxxx"

.gitignoreに、忘れずに.envを追加しましょう。

/.bundle
/.DS_Store
/.env # 追加

Gemfileにdotenvのgemを追加します。

source 'https://rubygems.org'
ruby '2.3.0'

gem 'sinatra', '1.4.7'
gem 'twitter', '5.16.0'
gem 'dotenv' # 追加

bundle installします。

$ bundle install

tweet.rbの冒頭に、dotenv関連の記述を追加します。

require 'twitter'
require 'dotenv' # 追加
Dotenv.load      # 追加

同じファイルで、アクセストークンとかをべた書きしてたところをこんな感じに置き換えます。

config.consumer_key        = ENV['CONSUMER_KEY']
config.consumer_secret     = ENV['CONSUMER_SECRET']
config.access_token        = ENV['ACCESS_TOKEN_KEY']
config.access_token_secret = ENV['ACCESS_TOKEN_SECRET']

これでローカルからの実行であれば動くようになったかと思います。
ところが、Herokuに乗っけると動きません。
なぜなら.env.gitignoreされているので、git push heroku masterではデプロイされないんですね。
Herokuでは別途、環境変数の設定が必要になります。

ターミナルから

$ heroku config:set CONSUMER_KEY="xxxxxxx"

$ heroku config:set CONSUMER_SECRET="xxxxxxxx"

$ heroku config:set ACCESS_TOKEN_KEY="xxxxxxx"

$ heroku config:set ACCESS_TOKEN_SECRET="xxxxxxxx"

このように設定してあげて下さい(ちょっと面倒…)。
そうすれば、Heroku上でも動かすことが出来ると思います。