not good but great

プログラミング、アート、映画・本の感想について書きます。

Sinatraで簡単なAPIを作成し、herokuにデプロイする

APIを作成

APIを作ってみる。以前Sinatraは少し触ったことがあったが、APIとか作ったことない。APIができれば、ニュースアプリのようなものが作れるかもしれないし、やってみることにした。
http://orfvr.hatenablog.com/entry/2014/05/07/143141

主なコマンドはこれを参考にした。
http://blog.morizotter.com/2014/03/22/simple-api-with-sinatra-on-heroku/

bundleしたときにpgがinstallできなかったので、下記を参考にした。
Can't find the PostgreSQL client library (libpq) - からくりがてんこ

bundle exec ruby app.rb

bundle execを冒頭につけないと、bundle installしたgemを読んでくれないので気をつける。

undefined method `join' for

sinatraのバージョンが古いようだった。gitリポジトリからgemを取ってくるように書き換えた後に、bundle install。
NoMethodError: undefined method `join' for #<String:0x007f62c3e6fb90> - Rack 1.6.0 · Issue #951 · sinatra/sinatra · GitHub

unable to open database file

SQLite3::CantOpenException at /articles
unable to open database file

というエラーが出た。

パーミッション変更
今回はディレクトリに入れていなかったので、変更する必要がなかったかもしれないが、development.dbに変更。
SQLite3でハマった点まとめ | gam0022.net

・db呼び出しコードを変更

ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'] || 'sqlite3://localhost/development.db')

修正前が上のやつ。

ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'] || 'sqlite3:development.db')

修正後。これで動いた。かなり悩んだ。どうしてこれで動くのかはわからないww

http://localhost:4567/articlesにアクセス

0,aaa,http://news.netkeiba.com/?pid=news_view&no=96692
1,bbb,http://news.netkeiba.com/?pid=news_view&no=96716
2,ccc,http://news.netkeiba.com/?pid=news_view&no=96715

このような競馬の記事を取得することを想定したcsvを作成。

これをsqliteに移行し、/articlesにアクセス。

{"articles":[{"id":0,"title":"aaa","url":"http://news.netkeiba.com/?pid=news_view\u0026no=96692"},{"id":1,"title":"bbb","url":"http://news.netkeiba.com/?pid=news_view\u0026no=96716"},{"id":2,"title":"ccc","url":"http://news.netkeiba.com/?pid=news_view\u0026no=96715"}]}

jsonが返ってきた!

heroku toolbeltのインストール

The Heroku CLI | Heroku Dev Center

あとは参考リンクを読みながら進めるとherokuにデプロイできて、指定urlにアクセスするとjsonが返ってきた。