くりにっき

フルスタックキュアエンジニアです

サザエ実況を支える技術 #sst_history

昨日社内LT大会で「サザエ実況を支える技術」というタイトルで発表したので資料を公開します。

SuperSazaeTime History

http://super-sazae-time.herokuapp.com/

Gemfile

完全な俺得アプリなのでソースを公開するつもりはありませんが*1、代わりにGemfileだけ公開します

source 'https://rubygems.org'

ruby '2.1.5'

gem 'rails', '4.2.0.rc3'

gem 'activeadmin', github: 'activeadmin', ref: '05c312'
gem 'coffee-rails', '~> 4.0.0'
gem 'devise'
gem 'inherited_resources', github: "Junyulive/inherited_resources", ref: "b65f0b5"
gem 'global'
gem 'jbuilder', '~> 2.0'
gem 'jquery-rails'
gem 'less-rails-bootstrap'
gem 'newrelic_rpm'
gem 'omniauth-twitter'
gem 'responders', '~> 2.0.2'
gem 'rollbar', '~> 1.2.6'
gem 'sass-rails', '~> 4.0.3'
gem 'slim-rails'
gem 'therubyracer'
gem 'twitter'
gem 'uglifier', '>= 1.3.0'

group :development do
  gem 'annotate'
  gem 'heart_seed', group: :production
  gem 'spring'
  gem 'sqlite3', group: :test
end

group :test do
  gem 'factory_girl_rails', group: :development
  gem 'rspec-its'
  gem 'rspec-json_matcher'
  gem 'rspec-rails', group: :development
  gem 'timecop'
end

group :production do
  gem 'pg', group: :test
  gem 'rails_12factor'
  gem 'unicorn'
end

Gemfileをidobata 風に書くのが最近のマイブームです

https://gist.github.com/kakutani/43b9f42197ab002fcdf8

Rails4.2.0.rc2 + activeadminでハマったのでメモ

Rails4.2.0.rc2 + activeadmin だとアプリ作った当時ハマったのでメモ。

当時は4.2.0.rc2だったんですが、4.2.0.rc3でもたぶん同じじゃないかなぁと思います。

急いでる人のまとめ

Before

gem 'rails', '4.1.8'
gem 'activeadmin', github: 'activeadmin', ref: '05c312'

After

gem 'rails', '4.2.0.rc2'
gem 'activeadmin', github: 'activeadmin', ref: '05c312'
gem 'inherited_resources', github: "Junyulive/inherited_resources", ref: "b65f0b5"
gem 'responders', '~> 2.0.2'

やったこと

rails 4.1.8 -> 4.2.0.rc2

bundle update は成功したんだけど rake db:migrate:reset でこんなエラーが出た

NameError: uninitialized constant ActionController::Responder
/cache/bundle-install/ruby/2.1.0/gems/inherited_resources-1.5.1/lib/inherited_resources/responder.rb:2:in `<module:InheritedResources>'
/cache/bundle-install/ruby/2.1.0/gems/inherited_resources-1.5.1/lib/inherited_resources/responder.rb:1:in `<top (required)>'
/cache/bundle-install/ruby/2.1.0/gems/inherited_resources-1.5.1/lib/inherited_resources.rb:4:in `<top (required)>'
/cache/bundle-install/ruby/2.1.0/bundler/gems/activeadmin-05c31283beed/lib/active_admin.rb:10:in `<top (required)>'
/cache/bundle-install/ruby/2.1.0/bundler/gems/activeadmin-05c31283beed/lib/activeadmin.rb:1:in `require'
/cache/bundle-install/ruby/2.1.0/bundler/gems/activeadmin-05c31283beed/lib/activeadmin.rb:1:in `<top (required)>'
/home/ubuntu/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/runtime.rb:76:in `require'
/home/ubuntu/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
/home/ubuntu/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/runtime.rb:72:in `each'
/home/ubuntu/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/runtime.rb:72:in `block in require'
/home/ubuntu/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/runtime.rb:61:in `each'
/home/ubuntu/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/runtime.rb:61:in `require'
/home/ubuntu/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler.rb:133:in `require'
/pipeline/build/config/application.rb:14:in `<top (required)>'
/pipeline/build/Rakefile:4:in `require'
/pipeline/build/Rakefile:4:in `<top (required)>'

rails 4.2.0で ActionController::Responder が消えてるのが原因っぽい

http://edgeguides.rubyonrails.org/4_2_release_notes.html#respond-with-class-level-respond-to

respondersの2.0系使えとのこと

respondersの2.0.2を入れた

Bundler could not find compatible versions for gem "responders":
  In Gemfile:
    activeadmin (>= 0) ruby depends on
      inherited_resources (!= 1.5.0, ~> 1.4) ruby depends on
        responders (~> 1.0) ruby

    responders (2.0.2)

activeadminが依存してるgemでバージョンがコンフリクトしてた

rails4.2でも動くinherited_resourcesを探す

inherited_resourcesのforkされてるbranch一覧みたらrails 4.2対応してる人がいたのでありがたく使わせてもらう https://github.com/Junyulive/inherited_resources/commit/b65f0b55558125419f7d1287e98f39d41a7ea4e6

追伸

今回もまたLT大会で優勝できませんでした(´・ω・`)

*1:Twitterの7アカウント分のtokenをseedにベタ書きしてるというのも理由の1つ