Ruby On RailsでherokuとLINE Message APIで名言ボットを作る
学ぶ事がいっぱいでしっかりアウトプットをしながら進めて行きたかったから
ボリュームがあるので小分けにしてアウトプットしてます
この記事の以前の進捗はこの記事を参照
早めにアウトプットしたのでタスク名とか
アクション名とか細かな設定は変更してます。
10分間隔で通知が出来る様になったから次は
DBに名言と名言を発信した方の写真を保存をして
保存したのをランダムで取得して出力をしていくまでのメモ!
データベースを事前に作成する
$ rails db:create
development.sqlite3とtest.sqlite3が作成される
モデルクラスを作成する
$ rails g model Post content:text image:text
マイグレーションの実行
$ rails db:migrate
データベース用コンソールを起動
$ rails dbconsole
テーブルが作成されていることを確認
sqlite> .table
テーブル構造を確認
sqlite> .schema テーブル名
引数を省略するとデータベースにある全てのテーブルを確認できる
db/seeds.rbに初期データを追加する
Post.create(:id => 1, :content => 'しっかりと 準備もしていないのに 目標を語る資格はない。 by イチロー', :image => 'https://trend-comment.com/wp-content/uploads/2013/08/A5A4A5C1A5EDA1BCA3B2.jpg') Post.create(:id => 2, :content => 'やってみて 「ダメだ」とわかったことと はじめから 「ダメだ」と言われたことは 違います。 by イチロー', :image => 'https://trend-comment.com/wp-content/uploads/2013/08/A5A4A5C1A5EDA1BCA3B2.jpg')
この時名言を1行で書くとlineで送られてくる時に
文がバラけた感じで送られてくるからこの様に記述した
けどもっと良い方法があるかもしれないからもっと
DBの勉強をしなくては!
そしてシードデータに投入する
$ rake db:seed
これでローカルの(SQLite3)に初期データを保存出来た!
webhookcontrollerを編集
meigendayoアクションでcontentカラムとimageカラムを
取得して、それをランダムに出力出来る様に記述
そしてhashで、DBから取り出したら配列になっているから
LINEドキュメントをのコードを参考にして、contentとimageを振り分ける
class WebhookController < ApplicationController require 'line/bot' def meigendayo number = (1..229).to_a number2 = number.sample meigen = Post.pluck(:content, :image) meigen2 = meigen[number2] hash = {"1" => meigen2[0], "2" => meigen2[1]} message = { "type": "text", "text": hash["1"] }, { "type": "image", "originalContentUrl": hash["2"], "previewImageUrl": hash["2"] } client = Line::Bot::Client.new { |config| config.channel_secret = ENV["LINE_CHANNEL_SECRET"] config.channel_token = ENV["LINE_CHANNEL_TOKEN"] } response = client.push_message(ENV["LINE_USER_ID"], message) end end
herokuにDBのテーブルを作る
訳あってローカルでSQLite3で本番でpostgresになっちゃったから
次は本番のpostgresにテーブルを作る
めんどくさい事になったけどDBを二つ使う事により
DBの良い勉強になったし、理解も深められたから
結果二つのDBで作業をして良かったって思う!
まずはマイグレーションの実行
$ heroku run rake db:migrate
そしてseedsファイルに記載されている情報をDBに追加
$ heroku run rake db:seed
そしてDBの確認
$ heroku pg:psql -a herokuのアプリ名
テーブルの確認
DATABASE=> select * from posts;
これでズラーッとDBに保存された内容が出たら成功!!
試しに
$ heroku run rake reminder_task:meigen
をしたらしっかりと名言と写真が送られてきました!
そして
$ git add . $ git commit -m "~~~" $ git push heroku master
こんな感じでLINEから名言と写真が送られてきました(☝︎ ՞ਊ ՞)☝︎