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
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
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
@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