2015-08-09 11 views
5

Sono confuso su quali gemme devono essere installate per eseguire correttamente Pry in un progetto Rails 4.2. Mi è sembrato che stia bene fino a poco tempo fa. Per qualche motivo, lo binding.pry sembra sputare quando provo a passare attraverso una sessione di console con next, step, ecc. Nella riga di comando. Lancia una brutta traccia di stack, quindi mostrami lo stesso punto nel codice, senza avanzare ulteriormente. Dopo il secondo comando next, genera la stessa traccia di stack e si chiude, restituendo l'esecuzione al server localhost. Ottengo un errore di runtime sulla pagina del browser con No frames collected.Come configurare correttamente Pry in Rails 4.2

Se commento il codice binding.pry nel mio codice, tutto funziona correttamente. Quindi sospetto fortemente che qualcosa non funzioni nella mia configurazione di Pry. Sembra che ci sono diverse decine di varianti di leva, senza chiare indicazioni su quali uno (s) dovrebbe essere installato, che potrebbe entrare in conflitto, ecc

Ecco la traccia dello stack ottengo quando si chiama next nella console leva dopo la codice raggiunge la chiamata binding.pry:

From: /Users/me/sites/arailsapp/app/controllers/bars_controller.rb @ line 31 BarsController#edit: 

    29: def edit 
    30: binding.pry 
=> 31: @bar = Bar.find(params[:id]) 
    32: @foo = @bar.foo 
    33: end 

[6] pry(#<BarsController>)> n 
Completed 500 Internal Server Error in 2685ms (ActiveRecord: 0.0ms) 

RuntimeError - No frames collected.: 
    pry-byebug (3.2.0) lib/byebug/processors/pry_processor.rb:122:in `perform_next' 
    pry-byebug (3.2.0) lib/byebug/processors/pry_processor.rb:60:in `perform' 
    pry-byebug (3.2.0) lib/byebug/processors/pry_processor.rb:49:in `run' 
    pry-byebug (3.2.0) lib/byebug/processors/pry_processor.rb:111:in `resume_pry' 
    pry-byebug (3.2.0) lib/byebug/processors/pry_processor.rb:69:in `at_line' 
    byebug (5.0.0) lib/byebug/context.rb:90:in `at_line' 
    app/controllers/scholarships_controller.rb:31:in `edit' 
    actionpack (4.2.1) lib/action_controller/metal/implicit_render.rb:4:in `send_action' 
    actionpack (4.2.1) lib/abstract_controller/base.rb:198:in `process_action' 
    actionpack (4.2.1) lib/action_controller/metal/rendering.rb:10:in `process_action' 
    actionpack (4.2.1) lib/abstract_controller/callbacks.rb:20:in `block in process_action' 
    activesupport (4.2.1) lib/active_support/callbacks.rb:117:in `call' 

    # omitting the next ~40 lines in the Rails stack... 

seconda strofa sembra uguale al primo - in cui l'esecuzione punto torna al server.

Ecco il mio Gemfile:

source 'https://rubygems.org' 

ruby '2.2.0' 

gem 'rails', '4.2.1' 
gem 'pg', '~> 0.18.2' 
gem 'haml-rails', '~> 0.9.0' 
gem 'sass-rails', '~> 5.0' 
gem 'jquery-rails' 
gem 'turbolinks' 
gem 'jbuilder', '~> 2.0' 
gem 'sdoc', '~> 0.4.0', group: :doc 
gem 'will_paginate', '~> 3.0.7' 
gem 'will_paginate-bootstrap' 
gem "nilify_blanks" 
gem 'filterrific', '~> 2.0.5' 
gem 'chardinjs-rails' 

# Install bootstrap and associated gems 
gem 'bootstrap-sass', '~> 3.3.4.1' 
gem 'autoprefixer-rails', '~> 5.2.0' 

# Use ActiveModel has_secure_password 
gem 'bcrypt', '~> 3.1.7' 

group :production do 
    gem 'rails_12factor', '~> 0.0.3' 
end 

group :assets do 
    gem 'uglifier', '>= 1.3.0' 
    gem 'coffee-rails', '~> 4.1.0' 
end 

group :development do 
    gem 'better_errors', '~> 2.1.1' 
    gem 'annotate', '~> 2.6.10' 
end 

group :development, :test do 
    gem 'pry-rails' 
    gem 'pry-stack_explorer'  
    gem 'pry-byebug' 
    gem 'web-console', '~> 2.0' 
    gem 'spring' 
    gem 'spring-commands-rspec', '~> 1.0.4' 
    gem 'rspec-rails', '~> 3.2.3' 
    gem 'guard-rspec', '~> 4.6.0' 
    gem 'sqlite3' 
    gem 'factory_girl_rails', '~> 4.5.0', require: false 
end 

group :test do 
    gem 'database_cleaner', '~> 1.4.1' 
    gem 'faker', '~> 1.4.3' 
    gem 'capybara', '~> 2.4.4' 
    gem 'launchy', '~> 2.4.3' 
    gem 'shoulda', '~> 3.5.0' 
end 

Ho anche provato con i pry-stack_explorer e pry-byebug gemme commentate ... nessuna differenza.

E, infine, il mio file .pryrc:

# ~/.pryrc 
if defined?(PryByebug) 
    Pry.commands.alias_command 'c', 'continue' 
    Pry.commands.alias_command 's', 'step' 
    Pry.commands.alias_command 'n', 'next' 
    Pry.commands.alias_command 'f', 'finish' 
end 

# Hit Enter to repeat last command 
Pry::Commands.command /^$/, "repeat last command" do 
    _pry_.run_command Pry.history.to_a.last 
end 
+0

Io uso solo pry-rails. A volte l'ho usato con byebug (non pry-byebug). Magari iniziare con uno solo e assicurarsi di raggruppare durante l'aggiornamento. Queste gemme possono a volte generare errori di coniglio, quindi aggiungi qualche registrazione se non sei convinto da cosa sta segnalando la leva. – margo

+0

Prima di tutto, rimuovi 'pry-stack_explorer' dal tuo Gemfile e rebundle. Quella gemma è incompatibile con 'pry-byebug' e' pry-byebug' offre funzionalità equivalenti quindi non è necessario. – deivid

+0

@deivid mi spiace, forse sono confuso, ma qual è la funzionalità equivalente per mostrare le offerte di pry-byebug? Non vedo alcuna possibilità di mostrare lo stack corrente. "pry-backtrace" è vicino, ma è pieno di metodi di leva interni. – elju

risposta

2

Alcuni armeggiare intorno e un paio di riavvii del server sembrano aver risolto il problema. Grazie a Deivid per aver suggerito di rimuovere pry-stack_explorer. Ecco il Gemfile per i gruppi di test e sviluppo:

group :development do 
    gem 'better_errors', '~> 2.1.1' 
    gem 'annotate', '~> 2.6.10' 
end 

group :development, :test do 
    gem 'pry-rails' 
    gem 'pry-byebug' 
    gem 'web-console', '~> 2.0' 
    gem 'spring' 
    gem 'spring-commands-rspec', '~> 1.0.4' 
    gem 'rspec-rails', '~> 3.2.3' 
    gem 'guard-rspec', '~> 4.6.0' 
    gem 'sqlite3' 
    gem 'factory_girl_rails', '~> 4.5.0', require: false 
end 

group :test do 
    gem 'database_cleaner', '~> 1.4.1' 
    gem 'faker', '~> 1.4.3' 
    gem 'capybara', '~> 2.4.4' 
    gem 'launchy', '~> 2.4.3' 
    gem 'shoulda', '~> 3.5.0' 
end 
Problemi correlati