2011-11-24 79 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