今日から本気出すブログ

やりたいことだけやって生きていくためにコツコツと

anemoneからのmysqlの利用法。「Rubyによるクローラー開発技法」記述ミス?

クローラーを使ったWEBサービスをやりたくてこの頃「Rubyによるクローラー開発技法」をやっています。 Railsはプログラミングじゃないなんて言う人は、この本を参考に、素のRubyでRackアプリを書くことから始めればいいじゃないかと。そんなくらいにRubyの基礎とアプリケーションを作るひと通りの動きが網羅されています。

とてもいい本なのですが、僕の環境のせいか一箇所ハマったので同様の人のためにシェアします。 環境はUbuntu14.04Desktopです。

ハマった箇所はP215、mysql.rbの初期化メソッド

def initialize(opts = {})
host = opts[:host] || 'localhost'
username = opts[:username] || 'crawler'
password = opts[:password] || 'ほげ'
database = opts[:database] || 'anemone'
@db = Mysql2::Client.new(:host => #{host}, :username => #{username}, :password => #{password}, :database => #{database})
create_schema
end

と、なっているんですが、この箇所、間違ってますよね…? 僕の環境では

def initialize(opts = {})
host = opts[:host] || 'localhost'
username = opts[:username] || 'crawler'
password = opts[:password] || 'ほげ'
database = opts[:database] || 'anemone'
@db = Mysql2::Client.new(:host => host, :username => username, :password => password, :database => database)
create_schema
end

としなければ動きませんでした…。

ここ、非常にややこしい箇所で、anemoneのソースにgem:mysql2でmysqlとの接続処理を追加するという部分。anemoneをソースからビルドしなければなりません。
僕の環境のせいか、Mysqlをインストールする時にひと悶着あったりと、エラー箇所の特定に非常に手間取りました。
ここで学んだことは、エラーが出たらすぐにコンソールのエラー箇所のソースを見に行って疑問を感じたらすぐに変えてみることですね。
本の記述が間違っているはずないなんて思って、色々類推して動いてかなりの遠回りをしてしまいました…。
そして結局、作ろうとしているものにAnemone組み込みの処理では不十分だったため、Mysql2をベタ書きでやることになりました。どんまい!