Ruby Weekly #501: 日本語サマリー
Highlights
RubyGems は TruffleRuby でもテストが全て通るようになった。他に全部通ってるのは MRI だけ。JRuby でもテストしてるが、一部スキップせざるを得ない。
Rails 6 が Webpacker になったのにもかかわらず Sprockets を維持してる理由。Webpacker が JS 経由で CSS・画像をインポートしてるのがキモイから。
Articles & Tutorials
RubyFann gem でニューラルネットワークを実装した話。
SHA-256 暗号化の各工程をアニメーションで表現する CLI。そして各工程の説明が README に載ってる。
- webdrivers gem はプラットフォームに合ったブラウザーの WebDriver を特定して用意してくれる。
- MiniTest から Capybara ヘルパーを呼ぶ。
- Capybara は selenium-webdriver を呼ぶ。
- selenium-webdriver は、webdrivers gem が特定したブラウザーの WebDriver を WebDriver プロトコールで呼ぶ。
- WebDriver がブラウザーを操作する。
ブラウザー | WebDriver |
---|---|
Chrome | chromedriver |
Firefox | geckodriver |
MS Edge | edgedriver |
Safari | safaridriver |
マルチスレッドで DB を叩いたら発生する ActiveRecord::ConnectionTimeoutError
の解消法。
- 終了したスレッドが connection を解放してくれないから、最後に
ActiveRecord::Base.clear_active_connections!
呼ぶこと。 - pool が足りるように
ワーカー数 * (スレッド数 + 1)
で設定。
docker コンテナ内のシステムテストをホストのブラウザで実行させる手順。筆者の Avdi Grimm 先生でも調べるのが大変だったらしい。
- webdrivers gem 削除。
- テストサーバノポート固定化。
- Capybara サーバ用環境変数を docker-compose.yml で設定。
- Capybara サーバ用環境変数を使うように test_helper.rb 設定。
ApplicationSystemTestCase
が remote ブラウザーを使うように設定。- ホストに chromedriver インストール・起動。
- docker コンテナ内でテスト実行。
Upgrading a Trivial Rails App from Ruby 2.3 to 2.7 and from Rails 4.2 to 6.0
簡易 Rails アプリを Ruby 2.3→2.7、Rails 4.2→6.0 にアップグレードした話。
- Ruby 2.3.1→2.3.8→2.4.10→2.5.8→2.6.3 のアップグレードは順調。
- Rails 4 から一気に 5.2 にアップグレードしたら痛い目に会った。4→5.0→5.1→5.2 のように、マイナーバージョンごとに deprecation 解消していくことがオススメ。
- Rails 6 へのアップグレードは、sqlite gem だけ追加する必要があった。
Code and Tools
暴走したシェルコマンドのせいで非同期ジョブのキューが停滞してしまった John Nunemaker 先生。posix-spawn gem に移行することでタイムアウトさせるようにできた。
Foreman だと pry への入力が見れない問題を解消してくれる pry-remote gem。