Ошибка сегментации с Rails после обновления до OS Sierra, возможно, связана с камнем sqlite3
После перехода на OSX Sierra у меня возникла проблема со случайными ошибками сегментации. Это чаще всего возникает при проверке рельсов, и я считаю, что это связано с 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, не являющимся безопасным fork. Более подробную информацию можно найти здесь:
https://github.com/sparklemotion/sqlite3-ruby/issues/195
В настоящее время я создал псевдоним в нижней части моего файла ~/.bashrc:
alias ss='spring stop'
Когда проблема возникает, я могу теперь ввести:
ss
а затем повторите тест.
Ответы
Ответ 1
Похоже, патч был выпущен! Патч будет искать sqlite3 в вашей папке brew вместо использования поставляемой Apple версии по умолчанию. Просто запустите:
bundle update
чтобы получить последнюю версию sqlite3-ruby, и если у вас еще нет sqlite3, установленного в вашем домашнем каталоге, запустите:
brew install sqlite3
Ответ 2
У меня была такая же проблема при обновлении до Sierra. Простой bundle update
сделает трюк! Надеюсь это поможет.
Ответ 3
Попробуйте восстановить камень sqlite3. У него есть собственные расширения, и их перекомпиляция в среде Sierra может решить проблему.
Run:
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
Ответ 4
Я заметил, что также получаю segfault при попытке запустить консоль rails --sandbox. Я нашел этот другой вопрос, который, похоже, решил эту проблему; особенно работает
xcode-select --install
казалось, разрешил это. Это отнюдь не научно доказано, однако я теперь могу запустить консоль рельсов и все тесты без повреждения сегмента рубинов.
Ответ 5
Такая же проблема с Сьеррой. Ни один из материалов на этой странице не работал у меня, т.е. gem pristine sqlite3
, xcode-select --install
, sqlite3; gem uninstall sqlite3; bundle update
. В итоге я полностью удалил версию Ruby с помощью rbenv uninstall 2.3.1
, а затем переустановил ее. Это сработало. Я понятия не имею, почему.
Ответ 6
Я столкнулся с той же проблемой, я обновил sqlite3 gem до 1.3.12 и помог
Ответ 7
Все предыдущие решения не работали, поэтому я исправил этот путь:
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
(Проверьте версию, которую вы имеете в Подвале)
Это временное исправление и, вероятно, если обновление пакета перестанет работать, и вы сделаете это снова, но, по крайней мере, я могу работать на своей машине