🙄

[Bug #21692] date などの標準的な Gem をコンパイルせずに利用したいという内容のチケット

に公開

[Bug #21692] Basic gems like date require a compiler

  • コンパイラのインストールが許可されていない高セキュリティな環境で date などの『コンパイルを要求する基本的な Gem 』が利用できなくて困っているというチケット
    • 昔は Ruby 本体にバンドルされていたので apt install ruby だけすれば利用できていたが最近は本体から切り離されることも多くなっているのでその影響みたい
    • default gem から bundled gem に移行している話になるのかな
  • これに関して bundle install --prefer-local のように --prefer-local オプションで回避できる、とコメントされている
  • どういうことかというと例えば次のように datedefault のバージョンは 3.3.3 だとする
$ gem list | grep date
date (default: 3.3.3)
  • 次のように Gemfiledate 3.3.3 を参照するように定義されている場合に
source "https://rubygems.org"

gem "date", "3.3.3"
  • bundle install を実行すると次のように date を新しくコンパイルしてインストールが行われる
    • 今回はこのコンパイルができなくて困っている話
$ RBENV_VERSION=3.2.3 bundle install
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Installing date 3.3.3 with native extensions
Bundle complete! 1 Gemfile dependency, 2 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
  • 一方で bundle install --prefer-local を使用すればコンパイルすることなくインストールができる、という想定
$ bundle install --prefer-local
Bundle complete! 1 Gemfile dependency, 2 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
  • --prefer-local を使用することで default で存在している date を直接参照する、みたいな挙動になるのかな
  • ただし、単純に bundle install --prefer-local するだけどうまく動作せず、いくつか回避方法を使用する必要があるみたい
  • 今回はそのまま利用することはできなかったんですが --prefer-local は知らなかった
GitHubで編集を提案

Discussion