37

我在我的 Rails 控制台中使用了 Pry gem,但是 pry 风格的 rails-console 似乎失去了重新加载!重新加载模型和东西的方法。

这是我如何启动撬控制台

c:\rails\app> pry -r ./config/environment

谢谢你

4

9 回答 9

22

使用重载!像 rails 控制台命令一样,将此代码添加到您的 .pryrc

# load Rails Console helpers like reload
require 'rails/console/app'
extend Rails::ConsoleMethods
puts 'Rails Console Helpers loaded'

EDIT== Gem pry-rails 已经完成了所有这些,更简单。

于 2012-12-10T12:18:40.907 回答
12

对于最近提出这个问题的任何人:Rails 3.2 中的答案已经改变,因为他们改变了实现reload! 方式,在早期版本中,irb 命令作为方法添加到Object,现在它们被添加到IRB::ExtendCommandBundle以避免污染全局命名空间。

我现在做的是 (1) 在 development.rb

silence_warnings do
  begin
    require 'pry'
    IRB = Pry
    module Pry::RailsCommands ;end
    IRB::ExtendCommandBundle = Pry::RailsCommands
  rescue LoadError
  end
end

和 (2) 在 .pryrc

if Kernel.const_defined?("Rails") then
  require File.join(Rails.root,"config","environment")
  require 'rails/console/app'
  require 'rails/console/helpers'
  Pry::RailsCommands.instance_methods.each do |name| 
    Pry::Commands.command name.to_s do 
      Class.new.extend(Pry::RailsCommands).send(name)
    end
  end
end

这是引入更改的 Rails 拉取请求的链接 - https://github.com/rails/rails/pull/3509

于 2012-01-23T18:25:34.803 回答
6

你可以告诉 Pry 在你的.pryrc

rails = File.join Dir.getwd, 'config', 'environment.rb'

if File.exist?(rails) && ENV['SKIP_RAILS'].nil?
  require rails

  if Rails.version[0..0] == "2"
    require 'console_app'
    require 'console_with_helpers'
  elsif Rails.version[0..0] == "3"
    require 'rails/console/app'
    require 'rails/console/helpers'
  else
    warn "[WARN] cannot load Rails console commands (Not on Rails2 or Rails3?)"
  end
end

这会给你的reload!回报。

于 2011-09-08T11:50:50.460 回答
6

您可以在 Pry wiki 上查看此页面:https ://github.com/pry/pry/wiki/Setting-up-Rails-or-Heroku-to-use-Pry

另请查看pry-rails插件:https ://github.com/rweng/pry-rails

该 wiki 上还有很多其他内容,这是一个很好的资源。

于 2011-09-08T12:40:16.210 回答
3

如果您在使用 Zeus 和 Pry 时遇到问题,请尝试添加到您的.pryrc

if Kernel.const_defined?(:Rails) && Rails.env
  require File.join(Rails.root,"config","environment")
  require 'rails/console/app'
  require 'rails/console/helpers'
  extend Rails::ConsoleMethods
end

取自这里

于 2015-01-19T18:01:14.563 回答
2

我最近写了一篇关于 pry 和 rails 的帖子。你可以在这里找到它http://lucapette.com/pry/pry-everywhere/。顺便说一句,正如 dave 已经说过的,您想将 pry 用于:

pry -r ./config/environment

我建议你试试我在文章中写的,它真的很好用。

于 2011-09-08T11:43:58.933 回答
2
alias pryr="pry -r ./config/environment -r rails/console/app -r rails/console/helpers"
于 2011-10-18T13:23:27.617 回答
1

你的意思是./config/environment

无论如何,我认为这与实际启动 rails 控制台不同,这就是reload!从哪里来的。我IRB = Pry在我的特定于 env 的配置文件中重新定义,这确保了一个完整的控制台,并且这一切都像一个魅力。

于 2011-09-08T11:40:52.033 回答
1

@Rodrigo Dias答案的更好版本。如果您不想使用pry-railsgem,那么只需将以下内容添加到您的.pryrc-

if defined?(Rails) && Rails.env
  if defined?(Rails::ConsoleMethods)
    include Rails::ConsoleMethods
  else
    def reload!(print=true)
      puts "Reloading..." if print
      ActionDispatch::Reloader.cleanup!
      ActionDispatch::Reloader.prepare!
      true
    end
  end
end

此代码正确识别环境并且不盲目包含Rails::ConsoleMethods.

来源 - Github 线程评论

于 2018-06-21T10:55:05.817 回答