Rails控制台自动重装库

时间:2011-11-24 16:50:34

标签: ruby-on-rails ruby

我正在构建我自己的类,它位于/ lib文件夹中并使用rails console进行调试。我很快遇到了一个问题,我必须重新加载!每当我修改我的类文件时我的控制台。想知道如何在文件更改时自动重新加载。

以下是我的配置:

班级位置

/lib/book.rb

代码

class Book  
  def hello
    puts 'hello'
  end
end

配置/ application.rb中

config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]

控制台

rails c
Book.new.hello

2 个答案:

答案 0 :(得分:1)

我认为guard不会这样做,但我可能错了。我的解决方案,因为今天出现了很多问题,就是在我的.irbrc文件中添加load_lib函数:

(请注意,这是Rails特定的,也许有人对此提出了建议)

 def load_lib
    path = File.join( Rails.root, 'lib') 
    failures = []
    Dir.glob("#{path}/**/*.rb").each {  |file|
    puts "loading: #{file} ... "
    begin
      load file
    rescue => ex
      failures << file 
    end
   } 
  # this second pass is here to try to catch anything that 
  # is dependent on something else
  # could be improved, but is working fine for my needs
  double_failures = []
  for file in failures 
    begin
      load file
    rescue => ex1
      double_failures << file 
    end
  end 

  if double_failures.size > 0 
    puts "these files failed twice"
    for file in double_failures
      puts file
    end
  end 
end

在Rails控制台中我只需要运行load_lib并加载我的库代码。这是一种蛮力,可能并不完美,但它满足了我的需求。它也没有回答你的问题,但它足够接近?

答案 1 :(得分:0)

我认为你能得到的最接近的是guard gem。当它看到它们发生变化时,它会监视你的文件并运行命令。这是对rails工作流程的一个很好的补充。

这是一个导弹episode以获取更多信息。

编辑:

这是我刚发现的东西 - keep your irb history的一种方式。我从来没有尝试过,但听起来它也适用于rails控制台。使用reload!并且能够保留irb历史记录,现在重新加载控制台应该会更方便。