読者です 読者をやめる 読者になる 読者になる

Annictをローカルで動かそうと試してみてハマった箇所を記録してみた #annict

Annictというアニメ視聴記録サービスがあります。結構前から利用していて、私がアニメ視聴記録サービスに求めているものが結構あるので、個人的に重宝しているサービスです。Github会議の時に開発者の方とお話しする機会があった際、「こんな機能が欲しい*1んですよね!」と訴えるくらいには使っています。

さて、このAnnictというサービス、日本のアニメ視聴記録サービスとしては珍しい特徴(恐らく現時点では唯一?)があります。それはOSSであるということです。

github.com

今回はこのAnnictをローカルで動かそうとしたときにハマってしまったポイントをメモ代わりに残そうかと思います。

前提条件

開発環境はVagrantを使用して、Ubuntu 14.04を仮想マシンのOSに選びました。

Annictを動かすのに必要なツール類はこの記事が書かれた時点でのREADMEに書かれた指示通りにやっていてみました。

bundle installに失敗する

これはnative extensionを必要とするgemをインストールするときに事前に入れておかなければいけないソフトウェアを入れていなかったことが原因でした。具体的に言うとpgとかrmagickとかのgemをインストールするときの話しですね。

具体的に何を入れておけば問題なかったかどうかは色々試行錯誤しながらだったので全ては覚えていませんがrmagickを入れるためにsudo apt-get install libmagick++-devをして、pgを入れるためにpostgresqlだけでなくsudo apt-get install libpq-devをしたのは覚えています。

bundle exec rake db:createが失敗する

bundle installが成功したのも束の間、次はbundle exec rake db:createが失敗して途方に暮れるという事態に。

エラーを見ていてpostgresql周りの設定が出来ていないのだろうと当たりをつけて色々ググった結果、pg_hba.confという設定ファイルの設定の仕方に問題がありそうだということがなんとなく分かりました。

要するにRailsの知識ではなくてPostgreSQLの知識が足りなくて失敗していたということです。

で、根本原因を突き詰めると知識不足もあり果てしなく時間がかかりそうだったので、とりあえず急場しのぎとしてpg_hba.conf内のauth_methodがmd5になっている箇所をtrustに変更してみたら無事bundle exec rake db:createが通るようになり、続くbundle exec rake db:migratebundle exec rake db:seedも成功するようになって解決。

ただ、これはpg_hba.confの設定をよく分からずにやっているよろしくない例なので、今後設定の意味をちゃんと調べて安全なやり方でやってみたいところですね。

ポートフォワーディングしてもVirtualbox上の開発環境にアクセスできない

ここまで出来たから後はアクセスするだけだ!と思ったのも束の間、今度はbundle exec rails sしたVirtualbox内のRailsにホストマシンからアクセスできない状態に苦しめられました。

ここのポイントは「ポートフォワードを正しく設定しているのにアクセスできない」というところで、原因が本当に分からずに死にました。

色々調べて最終的に分かったことは、Rails 4.2からrails serverのデフォルトホストが変わったことが影響しているということでした。

これはRack側の変更の影響とのことですが、これにより仮想マシンで動かしているRailsにアクセスしようとしても依然と同じようにはアクセスできないため、この記事を書いている時点でのREADMEの説明だとアクセスできなくなっていたということが判明したので、Rails 4.2のリリースノートに書いてあるように-b 0.0.0.0オプションをつけてbundle exec rails sして解決しました。

で、コレに関しては既存のものを恐らく壊さないだろうし、私でも間違えずに貢献できそうだと思ったので、Pull Requestを送っていましたが、記事を書いている間にMergeされました!

Twitterの認証に失敗する

で、これでようやくRailsにアクセスできるようになって「やった!」と思ったら、認証にハマりました。

結論を言うと、これも結局Railsの知識とかではなく、Twitterのアプリケーション登録しているかどうかという話しでした。

Twitterのアプリ登録をして得たConsumer KeyとConsumer Secretを、一連の作業の中で出来たconfig/application.ymlの中の設定に書き込んで解決。

この時地味にハマるのが、Twitterのアプリ登録時にCallback URLを設定していないと認証するときにエラーになるということ。(参考記事)

…こう書いていると自分の知識の無さにへこみますね…

最後に

とりあえず画像変換サーバーのtomboを動かしてやっているわけではないので画像周りは表示されませんが、無事にローカルで動くようになったので、とりあえずよしとしたいです。

今後の開発者が試しやすくなるようにVagrantfileとかDockerfileとかdocker-compose.ymlとかを用意してPull Requestを送れるようになったら送ろうと考えて今四苦八苦しています。

今後も何かしらいじってみて貢献できたらいいなと思って利用していくつもりです。

*1:「アニメ視聴ステータスにHummingbirdでいうOn Holdにあたるステータスを追加して欲しい」という要望でしたが、これは後日、ありがたいことに「中断という視聴ステータスが追加」という形で実装されました