1. sachiotomita

    No comment

    sachiotomita
Changes in body
Source | HTML | Preview
@@ -1,82 +1,122 @@
# 起こったこと
`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 を取り入れる。
``` :Gemfile
gem 'mini_racer', git: 'https://github.com/rubyjs/mini_racer', platforms: :ruby
```
該当部分
https://github.com/rubyjs/mini_racer/commit/94cdb03211044f2e0620c6275525d09f84f26c78
+https://github.com/rubyjs/mini_racer/issues/169
+
また、それでも直らない場合、参照している(この場合 `./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)
```
https://www.cyberciti.biz/faq/centos-rhel-7-redhat-linux-install-gcc-compiler-development-tools/
https://stackoverflow.com/questions/36327805/how-to-install-gcc-5-3-with-yum-on-centos-7-2
# 参考
https://stackoverflow.com/questions/36327805/how-to-install-gcc-5-3-with-yum-on-centos-7-2
https://github.com/rubyjs/mini_racer/issues/169