Подтвердить что ты не робот

Ошибка сегментации с 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

а затем повторите тест.

4b9b3361

Ответ 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

(Проверьте версию, которую вы имеете в Подвале)

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