rastam on rails

東京在住のマレーシア人 Rubyist

Ruby Weekly #501: 日本語サマリー

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 システムテスト各要素の説明。

  1. webdrivers gem はプラットフォームに合ったブラウザーの WebDriver を特定して用意してくれる。
  2. MiniTest から Capybara ヘルパーを呼ぶ。
  3. Capybara は selenium-webdriver を呼ぶ。
  4. selenium-webdriver は、webdrivers gem が特定したブラウザーの WebDriver を WebDriver プロトコールで呼ぶ。
  5. WebDriver がブラウザーを操作する。
ブラウザー WebDriver
Chrome chromedriver
Firefox geckodriver
MS Edge edgedriver
Safari safaridriver

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 先生でも調べるのが大変だったらしい。

  1. webdrivers gem 削除。
  2. テストサーバノポート固定化。
  3. Capybara サーバ用環境変数を docker-compose.yml で設定。
  4. Capybara サーバ用環境変数を使うように test_helper.rb 設定。
  5. ApplicationSystemTestCase が remote ブラウザーを使うように設定。
  6. ホストに chromedriver インストール・起動。
  7. 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。