2011-11-24 42 views
1

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

以下是我的配置:

类位置

/lib/book.rb 

代码

class Book 
    def hello 
    puts 'hello' 
    end 
end 

的config/application.rb中

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

控制台

rails c 
Book.new.hello 
+0

或者你可以使用rails runner来运行你的代码 –

回答

1

它看起来不像我guard会做到这一点,但我可能是错的。我的解决办法,因为这是今天来了很多是一个load_lib功能添加到我的.irbrc文件:

(注意,这是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并加载了我的库代码。它的强大功能可能并不完美,但它满足了我的需求。它也没有回答你的问题,但它足够接近?

+0

我在Windows上使用ruby,在哪里可以放置方法的定义,所以我可以从控制台触发它? (这是避免加载模块的例子) –

+0

@Dolphin我刚刚在我的项目中有一个脚本文件夹...所以我可以从Ruby控制台'加载'./ scripts/load_lib.rb'。我对你的建议是:在Linux VM中执行Rails,并忘记Windows。这就是我所做的。 Windows中的Rails太多了。 – jcollum

+0

所以真的:)但1.9.3并没有那么糟糕。 使它现在工作我只是调用reload_lib方法,它有你的代码(谢谢),代码是在模块中,我使它与初始化程序。 这是这个线程的解决方案http://stackoverflow.com/questions/9375420/where-to-define-method-to-be-accessible-directly-from-rails-console/9375537#comment11841098_9375537。 –

0

我认为你可以得到最接近的是guard gem。它会监视你的文件并在看到它们改变时运行命令。这是一个轨道工作流程的重要补充。

这里是一个轨道铸episode欲了解更多信息。

编辑:

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

+0

确实很有用,但是问题在于我可以检测到文件已更改,我不知道如何从命令提示符重新加载rails控制台。 – TonyTakeshi

+0

@TonyMocha耶认识。这就是为什么我开始说“最接近你可以......”。但是输入'reload!'那么糟糕?我从来没有遇到过问题。 – Dty