Установка 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 также включает в себя перестройку любых расширений гемов, которые воссоединят двоичные файлы с текущими библиотеками.

Другие вопросы по тегам