我在我的 Rails 控制台中使用了 Pry gem,但是 pry 风格的 rails-console 似乎失去了重新加载!重新加载模型和东西的方法。
这是我如何启动撬控制台
c:\rails\app> pry -r ./config/environment
谢谢你
我在我的 Rails 控制台中使用了 Pry gem,但是 pry 风格的 rails-console 似乎失去了重新加载!重新加载模型和东西的方法。
这是我如何启动撬控制台
c:\rails\app> pry -r ./config/environment
谢谢你
使用重载!像 rails 控制台命令一样,将此代码添加到您的 .pryrc
# load Rails Console helpers like reload
require 'rails/console/app'
extend Rails::ConsoleMethods
puts 'Rails Console Helpers loaded'
EDIT== Gem pry-rails 已经完成了所有这些,更简单。
对于最近提出这个问题的任何人: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
你可以告诉 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!
回报。
您可以在 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 上还有很多其他内容,这是一个很好的资源。
如果您在使用 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
取自这里
我最近写了一篇关于 pry 和 rails 的帖子。你可以在这里找到它http://lucapette.com/pry/pry-everywhere/。顺便说一句,正如 dave 已经说过的,您想将 pry 用于:
pry -r ./config/environment
我建议你试试我在文章中写的,它真的很好用。
alias pryr="pry -r ./config/environment -r rails/console/app -r rails/console/helpers"
你的意思是./config/environment
?
无论如何,我认为这与实际启动 rails 控制台不同,这就是reload!
从哪里来的。我IRB = Pry
在我的特定于 env 的配置文件中重新定义,这确保了一个完整的控制台,并且这一切都像一个魅力。
@Rodrigo Dias答案的更好版本。如果您不想使用pry-rails
gem,那么只需将以下内容添加到您的.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 线程评论