Kotz’i’jの返信機能も修正したことだし、このツイッターボットの紹介動画を作成した。フォロワー数が増えてくれば、それだけ問題点等も見つかりボットの改善がしやすくなるし。
そんなに時間もかけられないので素人感満載の動画だけど、まぁボットがどんなものかは分かるかな。BGMはグアテマラで最も有名な曲のひとつであるLuna de Xelajú。
Kotz’i’jの返信機能も修正したことだし、このツイッターボットの紹介動画を作成した。フォロワー数が増えてくれば、それだけ問題点等も見つかりボットの改善がしやすくなるし。
そんなに時間もかけられないので素人感満載の動画だけど、まぁボットがどんなものかは分かるかな。BGMはグアテマラで最も有名な曲のひとつであるLuna de Xelajú。
TwitterbotをHerokuからXserver上に移してCronで定期的に実行する様にしてから不具合のあったreplies.rb。問題点は直ぐに見つかったけど、その後Cronから実行するとこんなエラーが。
1 |
replies.rb:37:in `split': invalid byte sequence in US-ASCII (ArgumentError) |
で該当のコードがこちら。
1 2 3 4 5 6 |
open('dictionaries/vocList.txt') do |f| f.each do |line| a, b = line.split(/\t/) @vocList << [a, b] end end |
要はこのボキャブラリー・リストがアクセントやñを含む文字を含んでいるから文字化けが起こったのだと思う。で対処法としては
1 |
open('dictionaries/vocList.txt') do |f| |
を
1 |
open('dictionaries/vocList.txt', "r:UTF-8") do |f| |
とすると正しい文字コードが使われて実行出来るようになった。
よかった、よかった。
番外編も6まで来てしまった。Kotz’i’jはTwitter Botなので定期的且つ自動的に実行される必要がある。Herokuにデプロイしたのはそのためだったのに、思った通りに行かなかったのでXserverを活用することとした訳だし。
でCronの設定。こちらはSSH上でも出来るけどウェブページから。
サーバーパネルからCron設定を選択。
適宜入力して実行を試みる。
色々試して
こういう風にコマンドを入力したけどどうしても
1 2 |
kotzij/TwitterBot/tweets.rb:2:in `require': no such file to load -- rubygems (LoadError) from kotzij/TwitterBot/tweets.rb:2 |
というエラーが出てしまった。
SSH上では実行出来ているのでgemが無いということはない。色々検索したけど解決策が見当たらない。そもそもレンタルサーバー上でgemをrequireするRubyプログラム実行例が全く無い様な気がする。
試行錯誤の上思いついたのが.bashrcに記載したパスをCronでプログラムを実行する際に読み込めないかということ。つまり
1 |
export PATH=$HOME/kotzij/bin:$HOME/kotzij/bin/bin:$PATH && ruby kotzij/TwitterBot/tweets.rb |
こういう風に入力してみた。
ただこうするとgemは見つかるけど今度はdicitionariesフォルダ下にあるワード・リストが見当たらないということに。色々試行錯誤した結果カレント・ディレクトリがrootになっていることが問題かなと思いこちらも設定することとした。つまり
1 |
cd $HOME/kotzij/TwitterBot/ && export PATH=$HOME/kotzij/bin:$PATH && ruby tweets.rb |
こうした。これでしっかりと実行出来る様になった。これで好きな様にボットを管理出来る様になった。
RubyもGemもインストール出来たところで実際にプログラムを実行してみる。
sample.rb
1 2 3 |
#!/usr/kotzij/bin/ruby #print "Content-Type: text/html\n\n" puts "Al Kotz'i'j nub'i' in" |
一行目で利用するRubyを明示する。以前書いた通り、Xserverには異なるバージョンのRubyがインストールされているため。
2行目はブラウザからプログラムを実行する時に必要。なので今回は特に必要はない。因みにブラウザからプログラムを実行する時はパーミッションを705に変更する必要がある。それから.htaccessをプログラムと同じディレクトリに置く必要あり。Rubyの場合記述する内容は
1 |
AddHandler cgi-script .rb |
これは最低限でプログラムによっては記述すべき内容が増える。
ディレクトリを移動してプログラムを実行してみる。
1 2 3 |
cd ~/kotzij -bash-3.2$ ruby sample.rb Al Kotz'i'j nub'i' in |
ちゃんと実行出来た。
Al Kotz’i’j nub’i’ in (私の名前はKotz’i’jです)。”Al”でKotz’i’jが女性と判る。
次にgemを含むtweetsプログラムが実行出来るか試してみる。
1 2 |
cd ~/kotzij/TwitterBot ruby tweets.rb |
後はXserverのCronを使って定期的にツイートさせることが出来れば目標達成。
次はRubyGemsのインストール。
まずは移動する。
1 |
cd ~/kotzij/src |
それからRubyGemsをダウンロード。こちらもTwitter Botを作成した当時のバージョンをインストールする。
1 |
wget rubygems.org/rubygems/rubygems-2.6.13.tgz |
解凍して
1 |
tar xvzf rubygems-2.6.13.tgz |
移動して
1 |
cd rubygems-2.6.13 |
インストール。
1 |
ruby setup.rb |
の予定だったけどエラーが出た。
1 |
Rubygems now requires Ruby 1.8.7 or later |
要は先にインストールしたRuby 2.3.3ではなくデフォルトの1.8.5を使っているからこうなってしまう。なのでこうすればOK。
1 |
$HOME/kotzij/bin/ruby setup.rb |
インストール出来たかの確認。
1 2 |
gem -v 2.6.13 |
Heroku用に作ったGemfileを作成しているのでbundlerだけインストールして他のgemはbundler経由でインストールする。各gemのバージョン管理もその方が楽。
ということでまずはbundlerのインストール。
1 |
gem install bundler |
インストール出来た筈なのに
1 |
bundle -v |
で
1 |
bundle: command not found |
となってしまう。
1 |
gem env |
で見られるEXECUTABLE DIRECTORYにパスを通すとbundleが使える様になった。
1 2 |
bundle -v Bundler version 1.15.4 |
次に
1 |
bundle init |
と叩くとGemfileが作成される。
これに使用したいgemを記述する。以前作ったGemfileの内容は
1 2 3 4 |
source 'https://rubygems.org' gem 'sinatra' gem 'twitter', '5.17.0' gem 'google_drive', '2.1.5' |
だったので今回も同じ様に。
Gemfileに記述したgemをbundle経由でインストール。
1 |
bundle install |
インストール出来たか確認してみる。
1 |
gem list |
記述したgemがリストに載っていればOK。