起こったこと
Vagrant
CentOS
7 環境に Rails プロジェクトに gem react_on_rails
を導入して
React を動かそうとしたところ rails generate react_on_rails:install
で
追加されていた依存する gem mini_racer
が以下のエラーを出してRails 起動しなくなった。
/home/vagrant/dev/rails-proj/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.7/lib/bootsnap/load_path_cache/core_ext/
kernel_require.rb:23:in `require':
/home/vagrant/dev/rails-proj/vendor/bundle/ruby/2.6.0/gems/mini_racer-0.3.1/lib/
mini_racer_extension.so:
undefined symbol: _ZTTNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE - /home/vagrant/dev/rails-proj/vendor/bundle/ruby/2.6.0/gems/mini_racer-0.3.1/lib/mini_racer_extension.so (LoadError)
原因
最近、gem mini_racer
が version 0.3.x に上がったようで
不安定のよう。
解決法
とりあえず、gem mini_racer
(最近0.3.xに上がったようなので) 、修正対応のある、最新のversion を取り入れる。
gem 'mini_racer', git: 'https://github.com/rubyjs/mini_racer', platforms: :ruby
該当部分
また、それでも直らない場合、参照している(この場合 ./vendor/bundle
配下) のmini_racer_extension.so
をコンパイルしなおす。
一旦ファイル削除して、再度bundle install
$ sudo chmod 777 -R ./vendor/bundle # すべて削除する場合
$ rm -rf ./vendor/bundle
$ bundle install --path vendor/bundle
補足2
また、発生していたので、、追記。
$ rails
rails aborted!
LoadError: /home/vagrant/dev/rails-proj/vendor/bundle/ruby/2.7.0/gems/mini_racer-0.3.1/lib/mini_racer_extension.so: undefined symbol: _ZTTNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE - /home/vagrant/dev/rails-proj/vendor/bundle/ruby/2.7.0/gems/mini_racer-0.3.1/lib/mini_racer_extension.so
..
CentOS などOS のGCC
が古いと使えない。
GCC
version を上げて、
bundle install
などでbuild native extension する。
$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) # <- 古い
..
# gcc upgrade
$ sudo yum install centos-release-scl
$ sudo yum install devtoolset-9
$ scl enable devtoolset-9 bash
$ gcc --version
gcc (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2)
その上で、
# ↑ のGemfile 修正版branch 指定
$ rm -rf ./vendor/bundle
$ bundle install --path vendor/bundle
補足
最初は gem mini_racer
を 安定版の0.2.15
に戻したりしたが、
libv8
などで特定のGCC version 依存があるようで、
OSの GCC version調整がいるようで、
とりあえずこれで。
$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
参考