web-dev-qa-db-fra.com

Erreur de segmentation avec Rails après la mise à niveau vers OS Sierra, éventuellement liée à sqlite3 gem

Après la mise à niveau vers OSX Sierra, je rencontre un problème avec les erreurs de segmentation aléatoire. Cela se produit le plus souvent lors de l'exécution du test Rails et je pense que cela est dû au sqlite3_adapter.

Mon travail actuel consiste simplement à quitter le terminal et à le redémarrer. Cela fonctionne pour environ 1 ou 2 tests Rails et par le troisième, je suis presque certain d'avoir un autre défaut de segmentation.

Est-ce que quelqu'un d'autre a un problème avec cela ou trouve une meilleure solution de contournement?

$ 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]

Modifier

Après avoir creusé dans sqlite3_adapter.rb, je constate que la ligne à l'origine de l'erreur de segmentation est la création d'une nouvelle base de données SQlite3.

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

Edit 2:

Plutôt que d’arrêter et de redémarrer le terminal, j’ai trouvé que ça exécutait: 

spring stop

arrête le problème temporairement. Pas une solution, mais un meilleur travail autour. 

Edit 3:

Cela semble être un problème, car la bibliothèque libsqlite3 fournie par Apple n'est pas sécurisée. Plus d'informations peuvent être trouvées ici:

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

Pour l'instant, j'ai créé un alias au bas de mon fichier ~/.bashrc:

alias ss='spring stop'

Lorsque le problème survient, je peux maintenant taper:

ss

puis relancez le test. 

24
Hutch

On dirait qu'un patch a été publié! Le correctif recherchera sqlite3 dans votre dossier brassin au lieu d'utiliser la version fournie par Apple par défaut. Il suffit de lancer:

bundle update

pour obtenir la dernière version de sqlite3-Ruby et si vous n'avez pas déjà installé sqlite3 dans votre répertoire homebrew, exécutez:

brew install sqlite3
8
Hutch

J'ai eu le même problème lors de la mise à niveau vers Sierra. Un simplebundle updatefera l'affaire! J'espère que cela t'aides. 

4
Daniel Chamorro

Essayez de reconstruire la gem sqlite3. Il possède des extensions natives et leur recompilation dans l'environnement Sierra peut résoudre le problème.

Courir:

gem pristine sqlite3

Ce qui devrait donner une sortie comme:

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
2
Matt Brictson

J'ai remarqué que j'obtiens également une erreur de segmentation lorsque j'essaie d'exécuter spécifiquement la console - sandbox de Rails. J'ai trouvé cette autre question qui semblait résoudre ce problème; spécifiquement en cours d'exécution 

xcode-select --install

semblait le résoudre. Ceci n’a pas encore été scientifiquement prouvé, mais je peux maintenant exécuter une console Rails et tous les tests sans défaillance du segment Ruby.

2
lowphive

Même problème avec Sierra. Aucun des éléments de cette page ne fonctionnait pour moi, à savoir gem pristine sqlite3, xcode-select --install, sqlite3; gem uninstall sqlite3; bundle update. J'ai finalement complètement désinstallé la version Ruby avec rbenv uninstall 2.3.1, puis je l'ai réinstallé. Cela a fonctionné. Je ne sais pas pourquoi.

0
dps

J'ai fait face au même problème, j'ai mis à niveau sqlite3 gem en 1.3.12 et cela a aidé. 

0
Aigul

Toutes les solutions précédentes ne fonctionnaient pas, j'ai donc corrigé:

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

(Vérifiez la version que vous avez dans la cave)

Ceci est un correctif temporaire et probablement si le paquet est mis à jour, il cessera de fonctionner et vous le ferez encore mais au moins je peux travailler sur ma machine 

0
ilbonte