Ruby(Sinatra)とHerokuでTwitterbotを作るときに、tokenがリポジトリ内に残らないようにした
最近お仕事でしかコードを触っていなかったので、リハビリがてらサクッとできそうなやつを作りました。
表題の方法については、以下の記事をそのまま試しただけなので、ご参照下さい。
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上でも動かすことが出来ると思います。