2010-09-14 43 views
4

我想创建一个轨道模板,将在特定的行号代码添加到文件。例如我需要添加一个路由到配置/ routes.rb插入线到文件中使用轨道模板

我已经试过sed,gsed(只因为我在mac上,他们说sed有问题插入和追加),无论如何,我是无法达到我想要的效果。

对此的任何帮助将不胜感激。

我已经试过这个命令的几个排列,但没有工作,这里有一个例子

run "gsed '3 a/This is it' config/routes.rb" 

甚至另一个建议

编辑::::::

好,我花了休息一下,我回来的时候,在SED读了之后,我意识到我需要到流写回文件,但我这样做之前,

run "gsed '2 a\ 
Add this line after 2nd line 
' config/routes.rb > config/routes.rb" 

但路由文件将是空白的,所以我试图用不同的文件名(new.routes.rb),

run "gsed '2 a\ 
Add this line after 2nd line 
' config/routes.rb > config/new.routes.rb" 

和这个工作,所以我知道现在该做什么。

+0

你想要的轨道的版本支持? – BaroqueBobcat 2010-09-14 19:32:29

+0

rails 3,当然...大声笑 – creativeKoder 2010-09-14 19:47:43

+0

当你尝试'sed'3 a时会发生什么?这是'config/routes.rb'? – 2010-09-14 21:11:04

回答

15

由于行号更改为您的文件的发展,这是更好地插入新的代码之前或在现有字符串表达式后在您的模板生成器中,您可以这样做:

inject_into_file 'config/application.rb', :before => " end" do 
    "\n config.logger = Logger.new(config.paths.log.first, 50, 1048576)\n\n" 
end 

请注意,您可以使用:after if:before不符合您的需求。

+0

感谢您的信息,更聪明的解决方案 – creativeKoder 2010-11-14 17:56:16

0

我想知道为什么你使用SED这一点。编写一个Ruby脚本来打开文件,逐行读取它,进行更改并将文件写回。关于你将遇到的唯一问题是编辑一个文件“到位”。为了解决这个问题,打开一个temporary file,写入该文件,然后使用File.move将该文件移到旧文件上。

+1

+1这实质上是rails本身在生成资源时添加路由。 – Shadwell 2010-09-14 22:56:28

+0

这可以通过导轨模板来完成吗?请理解我是钢轨世界上的红宝石的新手,只是试图游到这个小小的红宝石岛,没有船。大声笑 – creativeKoder 2010-09-15 01:24:00

0

这将这样的伎俩,只记得删除旧的一个,并重新命名新在它的地方

run "gsed '2 a\ 
Add this line after 2nd line 
' config/routes.rb > config/new.routes.rb"