2012-07-19 36 views
1

我有一個rake任務,用於設置一堆符號鏈接,但前提是它們不存在。目前,當您運行任務時,沒有輸出。所以你不知道是否有任何事情發生。我如何通過爲每個符號鏈接說'創建'或'跳過'來提供像Rails生成器那樣的輸出?我需要包含哪些寶石或模塊才能獲得此類功能?如何顯示Rake任務的Rails-like輸出?

# example 
task :setup do 
    if !File.symlink?('/example/link') 
    %x{cd /example && ln -s /something link} 
    end 
end 
+1

看看這個問題與解答:http://stackoverflow.com/questions/2246141/puts-vs-logger-in-rails-rake-tasks – bento 2012-07-19 18:19:48

+0

@貝拉,一個是在談論使用Rails的記錄儀。不正是我想要做的。 – Andrew 2012-07-19 19:52:17

回答

0

我可能會使用Ruby的FileUtils ln_s功能。

ln_s(old, new, options = {}) 

創建新的符號鏈接指向舊。如果新已存在 並且它是一個目錄,則創建新/舊的符號鏈接。如果新已有 存在,並且它不是目錄,則引發Errno :: EEXIST。但是如果:強制 選項設置,則覆蓋新的。

FileUtils.ln_s '/usr/bin/ruby', '/usr/local/bin/ruby' 
FileUtils.ln_s 'verylongsourcefilename.c', 'c', :force => true 

...

ln_s(list, destdir, options = {}) 

創建一個目錄中的幾個符號鏈接,每一個列表指向 的項目。如果destdir不是目錄,則引發 Errno :: ENOTDIR。

如果destdir不是目錄,則引發Errno :: ENOTDIR。

+0

那麼'FileUtils.ln_s'提供了什麼'%x {ln -s}'不? – Andrew 2012-07-19 19:57:18

+0

@Andrew您不必擔心讀取輸入並從系統調用中解析它。您可以從Errno :: EEXIST異常中解救出來,並在文件已經存在時處理這些情況。另外,%x {}就像在系統上執行eval()一樣,這是一個不好的習慣,尤其是當你可以在Ruby中完成時。 – 2012-07-19 20:35:55

+0

好吧,聽起來像是一個好主意,切換到那個。現在回到我原來的問題,你知道如何創建一些類似於Rails生成器的格式化輸出嗎? – Andrew 2012-07-19 20:47:41