2013-10-21 10 views
22

Quando si esegue la protezione in un progetto Rails 4 con guard-rspec, durante l'apertura/chiusura di file in vim vedo sporadicamente il seguente errore. Ho provato ad aggiornare/downgrade di guardia, guardia-rspec, leva e altre librerie senza fortuna.Protezione causata da "Errore: impossibile modificare la stringa, temporaneamente bloccata"

  • rubino 2.0.0p247 (2013/06/27 revisione 41674) [x86_64-linux] versione
  • Bundler 1.3.5
  • Guardia versione 2.1.1

riportano di seguito le stacktrace vedo ogni pochi cicli di prova:

Error: can't modify string; temporarily locked 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:624:in `readline' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:624:in `block in readline' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:564:in `handle_read_errors' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:609:in `readline' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:384:in `retrieve_line' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:301:in `block in r' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:298:in `loop' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:298:in `r' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:276:in `re' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:254:in `rep' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:234:in `block (3 levels) in repl' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:232:in `loop' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:232:in `block (2 levels) in repl' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:231:in `catch' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:231:in `block in repl' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:230:in `catch' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_instance.rb:230:in `repl' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/pry-0.9.12.2/lib/pry/pry_class.rb:170:in `start' 
/home/charles/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/guard-2.1.1/lib/guard/interactor.rb:133:in `block in start' 
[1] Specs guard(main)> 
+0

Sto vivendo esattamente la stessa cosa. Sono su RVM (1.24.4). E ruby ​​2.0.0p353 (2013-11-22 revisione 43784) [x86_64-linux]. E fare leva 0.9.14. E Rails 3.2.14. E Ubuntu 13.10. –

risposta

16

Aggiunta del rb-readline gemma al mio Gemfile sembra risolvere il problema.

gem "rb-readline", "~> 0.5.0" 

La mia ipotesi è la versione compilata rbenv di Ruby 2.0.0-P247 ha problemi readline, il che spiega il motivo per cui l'errore si verifica in pry_instance.rb:624:in 'readline'. Il progetto rb-readline è un'implementazione pura ruby ​​della libreria readline e sembra alleviare il problema.

Potrebbe esserci una soluzione migliore che implica la ricompilazione del rubino, ma non l'ho trovato.

+1

Non so voi, ma l'uso di rb-readline avvita completamente il mio ambiente '' pry' '(cioè eseguendo 'binding.pry' mentre si eseguono le specifiche), quindi è un no go. –

+0

@ PawełGościcki Anch'io. Ci sono altri effetti collaterali con l'uso di rb-readline che ho notato. Ad esempio, le chiavi di casa e di fine non funzionano come previsto. –

3

Sembra essere un errore in Ruby 2.0.0 e 1.9.3 in effetti. Vedere https://bugs.ruby-lang.org/issues/8669

sua backport a Ruby 2.0.0 nella revisione 42216.

+3

Non sono sicuro che sia così. Sto usando Ruby 2.0.0p353 (2013-11-22 revisione 43784) e continuo a provarlo. –

+2

Stesso problema con 2.1.0p0 – gertas

+0

Sì, lo vedo anche con 2.1.0p0. –

0

stai usando Sublime Text 3? Se sì, dovresti sicuramente check this out!

TLDR: Set "atomic_save": false.

Problemi correlati