rubyweekly.com
Highlights
TruffleRuby Now Passes All RubyGems Tests
RubyGems は TruffleRuby でもテストが全て通るようになった。他に全部通ってるのは MRI だけ。JRuby でもテストしてるが、一部スキップせざるを得ない。
Why Does Rails 6 Include Both Webpacker and Sprockets?
Rails 6 が Webpacker になったのにもかかわらず Sprockets を維持してる理由。Webpacker が JS 経由で CSS・画像をインポートしてるのがキモイから。
Articles & Tutorials
Neural Networks in Ruby: A Not-So-Scary Introduction
RubyFann gem でニューラルネットワークを実装した話。
An Animation of the SHA-256 Hash Function in Your Terminal
SHA-256 暗号化の各工程をアニメーションで表現する CLI。そして各工程の説明が README に載ってる。
Rails 6 System Tests, From Top to Bottom
Rails 6 システムテスト各要素の説明。
- webdrivers gem はプラットフォームに合ったブラウザーの WebDriver を特定して用意してくれる。
- MiniTest から Capybara ヘルパーを呼ぶ。
- Capybara は selenium-webdriver を呼ぶ。
- selenium-webdriver は、webdrivers gem が特定したブラウザーの WebDriver を WebDriver プロトコールで呼ぶ。
- WebDriver がブラウザーを操作する。
Correct Ruby Threads and ActiveRecord Connections
マルチスレッドで DB を叩いたら発生する ActiveRecord::ConnectionTimeoutError
の解消法。
- 終了したスレッドが connection を解放してくれないから、最後に
ActiveRecord::Base.clear_active_connections!
呼ぶこと。
- pool が足りるように
ワーカー数 * (スレッド数 + 1)
で設定。
Run Rails 6 System Tests in Docker Using a Host Browser
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 解消していくことがオススメ。
- manifest.js がないというエラーは、空っぽの manifest.js を用意することで解消。
- 結合テストが実行できなくなってたのは、HTTP メソッド引数を最新 API に合わせることで解消。
- uglifier gem 追加することで
assets:precompile
実行できるようになった。
- Rails 6 へのアップグレードは、sqlite gem だけ追加する必要があった。
Code and Tools
Limit Everything: Timeouts for Shell Commands in Ruby
暴走したシェルコマンドのせいで非同期ジョブのキューが停滞してしまった John Nunemaker 先生。posix-spawn gem に移行することでタイムアウトさせるようにできた。
Pry Remote: Connect to Pry Remotely
Foreman だと pry への入力が見れない問題を解消してくれる pry-remote gem。