Ошибка сегментации в Rails после обновления до OS Sierra, возможно, связанная с драгоценным камнем sqlite3

После обновления до OSX Sierra у меня возникла проблема со случайными ошибками сегментации. Чаще всего это происходит при запуске теста rails, и я полагаю, что это связано с sqlite3_adapter.

Моя текущая работа заключается в том, чтобы просто выйти из терминала и перезапустить его. Это работает примерно для 1 или 2 тестов рельсов, и к третьему я почти гарантированно получу еще одну ошибку сегментации.

У кого-нибудь еще есть проблема с этим или найти лучший обходной путь?

$ rails t
Running via Spring preloader in process 13817
/Users/USER/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/sqlite3_adapter.rb:27: [BUG] Segmentation fault at 0x00000000000110
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin16]

Изменить:

Покопавшись в sqlite3_adapter.rb, я вижу, что строка, вызывающая ошибку сегментации, — это создание новой базы данных SQlite3.

db = SQLite3::Database.new(
    config[:database].to_s,
    :results_as_hash => true
)

Редактировать 2:

Вместо того, чтобы выйти и перезапустить терминал, я обнаружил, что работает:

spring stop

временно останавливает проблему. Не решение, а лучший обходной путь.

Редактировать 3:

Похоже, это проблема с поставляемой Apple libsqlite3, которая не является безопасной для форка. Дополнительную информацию можно найти здесь:

https://github.com/sparklemotion/sqlite3-ruby/issues/195

На данный момент я создал псевдоним внизу моего файла ~/.bashrc:

alias ss='spring stop'

Когда возникает проблема, теперь я могу ввести:

ss

а затем перезапустите тест.


person Hutch    schedule 02.10.2016    source источник


Ответы (7)


Похоже патч вышел! Патч будет искать sqlite3 в вашей папке с пивом вместо того, чтобы использовать версию, поставляемую Apple по умолчанию. Просто запустите:

bundle update

чтобы получить последнюю версию sqlite3-ruby, и если у вас еще не установлен sqlite3 в вашем домашнем каталоге, запустите:

brew install sqlite3
person Hutch    schedule 09.10.2016
comment
это сработало для меня. Если вы получаете сообщение «Эта формула предназначена только для бочонков», что означает, что она не была связана символической ссылкой в ​​сообщение /usr/local, я проигнорировал ее без каких-либо проблем. - person ObjectNameDisplay; 15.11.2016
comment
Небольшое примечание, чтобы сказать, что это точная последовательность команд, которая сработала для меня: brew install sqlite3; gem uninstall sqlite3; bundle update. - person Petros; 25.11.2016
comment
Я не могу заставить это работать на меня. Я запускал это несколько раз, а также gem pristine sqlite3, и все равно ничего не работает. У меня рубин 2.3.3. Есть ли что-нибудь еще, что я могу сделать? - person Casey; 08.12.2016
comment
У вас установлен хоумбрю? Что вы видите, когда запускаете brew list - person Hutch; 11.12.2016

У меня была такая же проблема при обновлении до Sierra. Простой bundle update поможет! Надеюсь это поможет.

person DC IT    schedule 02.10.2016
comment
Это работало временно, но похоже, что проблема вернулась. :( - person Hutch; 03.10.2016
comment
@Hutch То же самое произошло здесь. - person Michael McKenna; 16.10.2016
comment
Мне помогло, macOS Sierra - person Dmitri; 19.11.2016

Попробуйте пересобрать гем sqlite3. Он имеет собственные расширения, и их перекомпиляция в среде Sierra может решить проблему.

Бегать:

gem pristine sqlite3

Что должно дать вывод, например:

Restoring gems to pristine condition...
Building native extensions.  This could take a while...
Restored sqlite3-1.3.10
Building native extensions.  This could take a while...
Restored sqlite3-1.3.11
person Matt Brictson    schedule 02.10.2016
comment
Это не помогло. Я также попытался удалить и переустановить гем sqlite3. Неудачно. - person Hutch; 02.10.2016
comment
Это был последний шаг после установки sqlite3 из Homebrew. - person Koraktor; 05.11.2016

Я заметил, что я также получаю segfault при попытке запустить консоль rails --sandbox. Я нашел этот другой вопрос, который, казалось, исправить эту проблему; специально работает

xcode-select --install

казалось, решил это. Это еще ни в коем случае не доказано научно, однако теперь я могу запускать консоль rails и все тесты без ошибки рубинового сегмента.

person lowphive    schedule 06.10.2016
comment
Пробовал это, и я просто получаю, что они уже установлены. Спасибо за предложение! - person Hutch; 06.10.2016

Та же проблема с Сиеррой. Ни один из материалов на этой странице не работал у меня, то есть gem pristine sqlite3, xcode-select --install, sqlite3; gem uninstall sqlite3; bundle update. В конце концов я полностью удалил версию Ruby с помощью rbenv uninstall 2.3.1, а затем переустановил ее. Это сработало. Понятия не имею почему.

person dps    schedule 01.12.2016

Я столкнулся с той же проблемой, я обновил драгоценный камень sqlite3 до 1.3.12, и это помогло

person Aigul    schedule 03.12.2016
comment
после редактирования файла gem необходимо запустить установку пакета - person Aigul; 04.12.2016

Все предыдущие решения не работали, поэтому я исправил следующим образом:

gem uninstall sqlite3

brew install sqlite3

gem install sqlite3 -- --with-sqlite3-include=/usr/local/Cellar/sqlite/3.15.2/include --with-sqlite3-lib=/usr/local/Cellar/sqlite/3.15.2/lib

(Проверьте версию, которая у вас есть в Cellar)

Это временное исправление, и, вероятно, если обновить пакет, он перестанет работать, и вы сделаете это снова, но, по крайней мере, я могу работать на своей машине.

person ilbonte    schedule 12.12.2016