Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用rails模板将行插入到文件中_Ruby On Rails_Ruby_Templates_Sed - Fatal编程技术网

Ruby on rails 使用rails模板将行插入到文件中

Ruby on rails 使用rails模板将行插入到文件中,ruby-on-rails,ruby,templates,sed,Ruby On Rails,Ruby,Templates,Sed,我正在尝试创建一个rails模板,将代码添加到特定行号的文件中。例如,我需要在config/routes.rb中添加一条路由 我试过sed,gsed(只是因为我在mac上,他们说sed在插入和附加方面有问题),总之,我没能达到我想要的结果 在此方面的任何帮助都将不胜感激 我已经尝试了这个命令的几种排列方式,但都不起作用,下面是一个例子 run "gsed '3 a/This is it' config/routes.rb" 也许还有另一个建议 编辑: 好的,我休息了一下,当我回来的时候,在阅读

我正在尝试创建一个rails模板,将代码添加到特定行号的文件中。例如,我需要在config/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"
但是routes文件是空的,所以我尝试使用不同的文件名(new.routes.rb)


这很有效,所以我知道现在该怎么办。

我想知道为什么要使用sed来实现这一点。编写一个Ruby脚本打开文件,逐行读取,进行更改,然后将文件写回。唯一的问题是“就地”编辑一个文件。要解决这个问题,请打开一个文件,写入该文件,然后使用file.move将该文件移到旧文件上。

这样就可以了,只需记住删除旧文件并在其位置重命名新文件

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

因为行号随着文件的发展而变化,所以最好在现有字符串表达式之前或之后插入新代码。在模板生成器中,您可以执行以下操作:

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不能满足您的需要。

您希望支持哪一版本的rails?当您尝试
sed'3 a\This is it'config/routes.rb时会发生什么?什么都没有发生,我认为运行模板的路径不正确,有人知道rails模板文件是否在rails\u根目录中执行,如果不是,我想我知道该怎么做,但我不确定如何找出路径。+1这本质上是rails本身在生成资源时添加路由的功能。这可以通过rails模板完成吗?请理解,我是ruby on rails世界的新手,只是想游到这个ruby小岛上,没有船。谢谢你的信息,更聪明的解决方案
inject_into_file 'config/application.rb', :before => "  end" do
  "\n    config.logger = Logger.new(config.paths.log.first, 50, 1048576)\n\n"
end