メインの処理は大したことやってないので、
今更ながらの初体験やテストの部分で少しだけ詰まったのでそれらを書こうとおもいます。
初 Heroku
最初は社内の閉じた環境に立ててたんですが、
最近流行りのサービスに乗り遅れまくってたので Heroku で運用することに。
初 Redis
社内に閉じていた時のプロトタイプはこれ
ジョージアシールを入力してもらって、web.rb と同じディレクトリにある serial.txt にどんどん追記していく — Gist
bash だけで全部できないかなーと思って作り始めたんだけど、
なんかリクエストの扱いとかめんどくさそうだったので sinatra をかませ、
だけど記録の所だけは bash の名残りが、みたいなものです。
flock だったり lockfile だったりの使い方わかったのはいいけど、
結局 Heroku に乗せる時にサヨナラしました。bash 奥が深いわー。
そんなわけで Heroku Plugin に Redis To Go Nano を導入しました。
導入の仕方は Redis To Go | Heroku Dev Center 見れば簡単でした。
初 pull request した
されたことはあるけどしたことなかった。
heroku-redis-cli を使うと warning が出たのでそれの
Pull Request #3: Remove deprecated methods by gongo · rapportive-oss/heroku-redis-cli · GitHub
まだされていない
初 「Sinatra のテスト」
Testing Sinatra with Rack::Test 見ればだいたいできるね! rack-test 便利。
テストコードはこちら gpkure/test/test_web.rb 。
iPhone 専用画面のテスト
ajax を扱いたかったのと、ヘッドレスで生きていきたかったので capybara-webkit を採用しました。
rack-test の時は user-agent の書き換えは簡単だった けど
capybara の場合はどうすんだろうってお悩みしておりました。
ぐぐるといくつか方法みつかるんだけど、なかなか上手くいかず。
いろいろあるんだろうけど、自分の中では最終的にこうなりました
require 'capybara/webkit' Capybara.default_driver = :webkit Capybara.javascript_driver = :webkit class GpkureAcceptanceTest < Test::Unit::TestCase include Capybara::DSL def setup Capybara.app = Sinatra::Application.new page.driver.header('user-agent', USER_AGENT_IPHONE4) end def test_gift_success visit '/' fill_in 'serial', :with => '1234567812345678' find('#gift').click end end
コードはこちら
Capybara::Driver::Webkit#header を使って変更する手でいきました。
あと Capybara::RackTest::Driver や Capybara::Mechanize::Driver (capybara-mechanize) を使う場合は
Capybara.register_driver :iphone do |app| Capybara::RackTest::Driver.new(app, :headers => {'HTTP_USER_AGENT' => 'iPhone'}) # Capybara::Mechanize::Driver.new(app, :headers => {'HTTP_USER_AGENT' => 'iPhone'}) end Capybara.default_driver = :iphone
とかでいけるかもしれませんねぇ。きっとたぶん。
Travis CI で Headless Browser Test
しっかりと対応してた。便利 Travis CI: GUI & Headless browser testing on travis-ci.org
そんなわけで こんな .travis.yml で全てうまくいきました。
まとめ
ジョージアポイントください