プロジェクト

全般

プロフィール

バグ #1270

GEM_HOMEにライブラリをインストールしてもvendor/にあるライブラリが読み込まれる

Masanori Ogino3ヶ月前に追加. 3ヶ月前に更新.

ステータス:
新規
優先度:
通常
担当者:
-
対象バージョン:
プラグイン名:
ブランチ:
クラッシュする:
はい

説明

GEM_HOMEを設定してbundle installするとGEM_HOME以下に依存ライブラリがインストールされる。
しかし、その後bundle exec ./mikutter.rbするとvendor/が存在する場合はそちらにあるライブラリが読み込まれる。

この挙動により、vendor/にある.soが利用できない環境ではライブラリのインストール後も起動時にld.soのエラーで起動することができない。
bundle installの前後に関わらずvendor/を削除すると起動することができるようになる。

報告者は以下の環境でテストした。

  • mikutter 3.7.1, OpenBSD 6.3 amd64, vendor/あり(起動失敗)
  • mikutter 3.7.1, OpenBSD 6.3 amd64, vendor/なし(起動成功)
  • mikutter 4cf829202d, OpenBSD 6.3 amd64(起動成功、vendor/はバンドルされていない)

この挙動について、としぁさんから現段階では意図した仕様である旨を確認している。(https://social.mikutter.hachune.net/@toshi_a/100116959221271340)

Masanori Ogino あー、難しいな、確かに仕様ではあるけど、tarballやArch含むいくつかのディストリではこの仕様を利用してるし、問題になるケースを具体的に報告されたらどこかのマイナーアップデートで廃止しようということになるかも。

OpenBSD 6.3 GENERIC.MP amd64での例:

bash-4.4$ bundle25 exec ./mikutter.rb
Traceback (most recent call last):
        66: from ./mikutter.rb:42:in `<main>'
        65: from /home/omasanori/mikutter/core/miquire.rb:18:in `miquire'
        64: from /home/omasanori/mikutter/core/miquire.rb:75:in `miquire'
        63: from /home/omasanori/mikutter/core/miquire.rb:75:in `each'
        62: from /home/omasanori/mikutter/core/miquire.rb:76:in `block in miquire'
        61: from /home/omasanori/mikutter/core/miquire.rb:95:in `file_or_directory_require'
        60: from /home/omasanori/mikutter/core/miquire.rb:98:in `miquire_original_require'
        59: from /home/omasanori/mikutter/core/miquire.rb:98:in `require'
        58: from /home/omasanori/mikutter/core/boot/load_plugin.rb:10:in `<top (required)>'
        57: from /home/omasanori/mikutter/core/miquire_plugin.rb:96:in `load_all'
        56: from /home/omasanori/mikutter/core/miquire_plugin.rb:36:in `each_spec'
        55: from /home/omasanori/mikutter/core/miquire_plugin.rb:33:in `each'
        54: from /home/omasanori/mikutter/core/miquire_plugin.rb:33:in `each'
        53: from /home/omasanori/mikutter/core/miquire_plugin.rb:38:in `block in each_spec'
        52: from /home/omasanori/mikutter/core/miquire_plugin.rb:98:in `block in load_all'
        51: from /home/omasanori/mikutter/core/miquire_plugin.rb:146:in `load'
        50: from /home/omasanori/mikutter/core/utils.rb:278:in `atomic'
        49: from /usr/local/lib/ruby/2.5/monitor.rb:226:in `mon_synchronize'
        48: from /home/omasanori/mikutter/core/utils.rb:278:in `block in atomic'
        47: from /home/omasanori/mikutter/core/miquire_plugin.rb:147:in `block in load'
        46: from /home/omasanori/mikutter/core/miquire_plugin.rb:147:in `each'
        45: from /home/omasanori/mikutter/core/miquire_plugin.rb:149:in `block (2 levels) in load'
        44: from /home/omasanori/mikutter/core/miquire_plugin.rb:146:in `load'
        43: from /home/omasanori/mikutter/core/utils.rb:278:in `atomic'
        42: from /usr/local/lib/ruby/2.5/monitor.rb:226:in `mon_synchronize'
        41: from /home/omasanori/mikutter/core/utils.rb:278:in `block in atomic'
        40: from /home/omasanori/mikutter/core/miquire_plugin.rb:147:in `block in load'
        39: from /home/omasanori/mikutter/core/miquire_plugin.rb:147:in `each'
        38: from /home/omasanori/mikutter/core/miquire_plugin.rb:149:in `block (2 levels) in load'
        37: from /home/omasanori/mikutter/core/miquire_plugin.rb:146:in `load'
        36: from /home/omasanori/mikutter/core/utils.rb:278:in `atomic'
        35: from /usr/local/lib/ruby/2.5/monitor.rb:226:in `mon_synchronize'
        34: from /home/omasanori/mikutter/core/utils.rb:278:in `block in atomic'
        33: from /home/omasanori/mikutter/core/miquire_plugin.rb:158:in `block in load'
        32: from /home/omasanori/mikutter/core/miquire_plugin.rb:158:in `load'
        31: from /home/omasanori/mikutter/core/plugin/gtk/gtk.rb:7:in `<top (required)>'
        30: from /home/omasanori/mikutter/core/miquire.rb:18:in `miquire'
        29: from /home/omasanori/mikutter/core/miquire.rb:75:in `miquire'
        28: from /home/omasanori/mikutter/core/miquire.rb:75:in `each'
        27: from /home/omasanori/mikutter/core/miquire.rb:76:in `block in miquire'
        26: from /home/omasanori/mikutter/core/miquire.rb:95:in `file_or_directory_require'
        25: from /home/omasanori/mikutter/core/miquire.rb:98:in `miquire_original_require'
        24: from /home/omasanori/mikutter/core/miquire.rb:98:in `require'
        23: from /home/omasanori/mikutter/core/mui/cairo_inner_tl.rb:3:in `<top (required)>'
        22: from /home/omasanori/mikutter/core/miquire.rb:18:in `miquire'
        21: from /home/omasanori/mikutter/core/miquire.rb:75:in `miquire'
        20: from /home/omasanori/mikutter/core/miquire.rb:75:in `each'
        19: from /home/omasanori/mikutter/core/miquire.rb:76:in `block in miquire'
        18: from /home/omasanori/mikutter/core/miquire.rb:95:in `file_or_directory_require'
        17: from /home/omasanori/mikutter/core/miquire.rb:98:in `miquire_original_require'
        16: from /home/omasanori/mikutter/core/miquire.rb:98:in `require'
        15: from /home/omasanori/mikutter/core/mui/cairo_timeline.rb:9:in `<top (required)>'
        14: from /home/omasanori/mikutter/core/miquire.rb:18:in `miquire'
        13: from /home/omasanori/mikutter/core/miquire.rb:75:in `miquire'
        12: from /home/omasanori/mikutter/core/miquire.rb:75:in `each'
        11: from /home/omasanori/mikutter/core/miquire.rb:76:in `block in miquire'
        10: from /home/omasanori/mikutter/core/miquire.rb:95:in `file_or_directory_require'
         9: from /home/omasanori/mikutter/core/miquire.rb:98:in `miquire_original_require'
         8: from /home/omasanori/mikutter/core/miquire.rb:98:in `require'
         7: from /home/omasanori/mikutter/core/mui/gtk_postbox.rb:9:in `<top (required)>'
         6: from /home/omasanori/mikutter/core/mui/gtk_postbox.rb:9:in `require'
         5: from /home/omasanori/mikutter/vendor/twitter-text.rb:22:in `<top (required)>'
         4: from /home/omasanori/mikutter/vendor/twitter-text.rb:22:in `each'
         3: from /home/omasanori/mikutter/vendor/twitter-text.rb:23:in `block in <top (required)>'
         2: from /home/omasanori/mikutter/vendor/twitter-text.rb:23:in `require'
         1: from /home/omasanori/mikutter/vendor/twitter-text/extractor.rb:2:in `<top (required)>'
/home/omasanori/mikutter/vendor/twitter-text/extractor.rb:2:in `require': Cannot load specified object - /home/omasanori/mikutter/vendor/idn.so (LoadError)

再現手順

1. Linux x86_64でない環境を用意する
2. GEM_HOME=$HOME/gems; export GEM_HOME
3. cd mikutter; bundle install
4. bundle exec ./mikutter.rb

履歴

#1 Masanori Ogino3ヶ月前に更新

  • トラッカー機能 から バグ に変更
  • 開始日 を削除 (2018-06-15)
  • 再現手順 を更新 (diff)
  • クラッシュするはい にセット

#2 ncaq net3ヶ月前に更新

Gentoo Linuxのx86_64環境でshareにインストールするようにしているのですが同じ症状が発生しますね
librubyやlibidnの期待するファイル名が違うからエラーが起きるようです

#3 ncaq net3ヶ月前に更新

私のoverlayであるncaq-overlayではvendorをインストールせずに外部パッケージを利用するように設定したらうまくいきました

他の形式にエクスポート: Atom PDF