2012-07-19 35 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