2015-08-09 28 views
5

我很困惑需要安裝哪些寶石才能在Rails 4.2項目中正確運行Pry。直到最近,我似乎都很好。出於某種原因,binding.pry現在似乎吐了,只要我嘗試在命令行中通過與nextstep等步調控制檯會話。它會拋出一個醜陋的堆棧跟蹤,然後向我展示代碼中的相同點,而不會進一步邁進。在第二個next命令之後,它會拋出相同的堆棧跟蹤並退出,並將執行返回到本地主機服務器。我在No frames collected的瀏覽器頁面上收到運行時錯誤。如何在Rails 4.2中正確設置Pry 012

如果我在我的代碼中註釋掉binding.pry,一切正常。所以我強烈懷疑我的Pry配置有問題。似乎有幾十個變種的Pry,沒有明確的指導應該安裝哪一個或哪些,這可能會產生衝突等。

這是我在Pry控制檯中調用next後得到的堆棧跟蹤代碼到達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... 

第二段看起來同第一 - 在這一點執行返回到服務器。

這裏是我的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 

我也試圖與註釋掉......沒什麼區別pry-stack_explorerpry-byebug寶石。

最後,我.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

我只是使用pry-rails。有時候我用它與byebug(而不是pry-byebug)。也許從一個開始,並確保在更新時進行捆綁。這些寶石有時會拋出兔子洞的錯誤,所以如果你不確信哪些撬子正在報告,請添加一些日誌記錄。 – margo

+0

首先,從你的Gemfile和rebundle中刪除'pry-stack_explorer'。該寶石與「pry-byebug」不兼容,「pry-byebug」提供相同的功能,所以它不是必需的。 – deivid

+0

@deivid對不起,也許我很困惑,但pry-byebug提供的顯示棧的等效功能是什麼?我沒有看到任何顯示當前堆棧的能力。 「pry-backtrace」很接近,但它內部的撬方法很混亂。 – elju

回答

2

一些擺弄周圍和一些服務器重新啓動似乎已經解決了這一問題。感謝Deivid提出的建議pry-stack_explorer。這裏是測試和開發組的Gemfile:

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