Установка gem не перестраивает все экземпляры gem
user@sv1 [/home/user/]# env|grep GEM
GEM_HOME=/home/user/.gems/2.1
GEM_PATH=/home/user/.gems/2.1
user@sv1 [/home/user/]# gem install mysql2
Building native extensions. This could take a while...
Successfully installed mysql2-0.3.18
1 gem installed
that installs mysql2.so in multiple locations:
user@sv1 [/home/user/]# find /home/user/.gems -name mysql2.so
/home/user/.gems/2.1/extensions/x86_64-linux/2.1.0-static/mysql2-0.3.18/mysql2/mysql2.so
/home/user/.gems/2.1/gems/mysql2-0.3.18/ext/mysql2/mysql2.so
/home/user/.gems/2.1/gems/mysql2-0.3.18/lib/mysql2/mysql2.so
user@sv1 [/home/user/]# ls -l /home/user/.gems/2.1/extensions/x86_64-linux/2.1.0-static/mysql2-0.3.18/mysql2/mysql2.so
-rwxr-xr-x 1 user user 64842 mar 18 16:13 /home/user/.gems/2.1/extensions/x86_64-linux/2.1.0-static/mysql2-0.3.18/mysql2/mysql2.so
user@sv1 [/home/user/]# ls -l /home/user/.gems/2.1/gems/mysql2-0.3.18/ext/mysql2/mysql2.so
-rwxr-xr-x 1 user user 64842 mar 18 16:13 /home/user/.gems/2.1/gems/mysql2-0.3.18/ext/mysql2/mysql2.so
now I want to rebuild this extension so I do:
user@sv1 [/home/user/]# gem install mysql2
Building native extensions. This could take a while...
Successfully installed mysql2-0.3.18
1 gem installed
user@sv1 [/home/user/]# ls -l /home/user/.gems/2.1/extensions/x86_64-linux/2.1.0-static/mysql2-0.3.18/mysql2/mysql2.so
-rwxr-xr-x 1 user user 64842 mar 18 16:13 /home/user/.gems/2.1/extensions/x86_64-linux/2.1.0-static/mysql2-0.3.18/mysql2/mysql2.so
user@sv1 [/home/user/]# ls -l /home/user/.gems/2.1/gems/mysql2-0.3.18/ext/mysql2/mysql2.so
-rwxr-xr-x 1 user user 87485 mar 18 16:16 /home/user/.gems/2.1/gems/mysql2-0.3.18/ext/mysql2/mysql2.so
Как вы можете видеть, /home/user/.gems/2.1/extensions/x86_64-linux/2.1.0-static/mysql2-0.3.18/mysql2/mysql2.so не был перестроен. Что еще хуже, этот файл фактически используется, когда "требуют 'mysql2'" в коде ruby. Это блокирует восстановление / обновление драгоценного камня. Конечно, я могу решить эту проблему, удалив этот старый файл и затем "gem install", но это приводит к запоминанию множества новых переменных и множества трудных для диагностики проблем. Как перестроить все файлы gem (mysql2.so здесь) с помощью команды gem? Или, может быть, это ошибка в программе "драгоценный камень"?
Эта проблема не характерна для самоцвета mysql2, так как другие самоцветы ведут себя так же.
Кто-то может сказать, что нет необходимости перестраивать гем, когда его версия не изменилась - но именно когда libs обновлял / изменял его ссылку (например, libmysqlclient для mysql2 gem)
1 ответ
Вы можете искать pristine
опция:
gem pristine mysql -v 0.3.18
или без -v
Я верю, что это будет работать только на самой последней версии, но есть и --all
вариант.
Увидеть gem help pristine
для документации:
Restores installed gems to pristine condition from files located in the gem
cache
С помощью pristine
также включает в себя перестройку любых расширений гемов, которые воссоединят двоичные файлы с текущими библиотеками.