有关使用gsub的任何建议吗? 在irb控制台中工作正常,但不会在实际文件中查找/替换

我有一些webapp的基本框架(一些静态页面,用户身份validation,使用rpec进行基本测试)。 我想将此作为未来webapps的基础。 我把我的项目命名为“框架”,所以如果我把它分开,我将会有大约十几个实例,我必须用我正在创建的新应用程序的名称替换术语“Framework”。 这个项目是github.com/bnd5k/framework 。 README文件包含我需要进行更改的文件列表。 我可以手工完成这些更改,但我更愿意自动执行此过程。 我认为最简单的方法是在Framework中包含一个rake文件。 所以,我创建了名为renamer.rake的rake文件。 我的rake文件基于这篇文章: 如何在文件文本中搜索模式并将其替换为给定值 。 这就是我想出的。

task :rename do file_names = ['config/environments/test.rb', 'config/environments/production.rb', 'config/environment.rb'] file_names.each do |file_name| text = File.read(file_name) puts text.gsub("Framework", "funktrunkgunk") end end 

这段代码的工作原理是它用不同的术语替换术语“框架”,但它只能在控制台中使用。 我需要它来实际更改文件的内容。 我需要做什么? 我是否需要打开每个文件而不是只读它?

仅供参考这个代码只列出了几个文件(这样我就可以测试这个方法是否有效),替换术语最终将是一个变量,而不是“funktrunkgunk”。 一旦我得到这个部分,我想设置它,以便任何人都可以克隆框架repo到他们的机器,cd到框架目录,启动rails服务器,然后转到他们的浏览器上的本地主机重命名该文件那里。 我将public / index.html设置为包含表单字段的基本页面,用户可以在其中输入自己的应用程序名称。 一旦用户单击“名称应用程序”按钮,它将运行rake文件。 这听起来可行吗?

您需要再次将更改的文本写入文件。

 File.open(file_name, 'w') { |f| f << text.gsub("Framework", "funktrunkgunk") } 

您的所有代码都是在局部变量text进行替换。 要在物理文件上进行更新,您必须打开文件并编写替换文本。 例如

 task :rename do file_names = ['config/environments/test.rb', 'config/environments/production.rb', 'config/environment.rb'] file_names.each do |file_name| text = File.read(file_name) File.open(file_name, "w") { |file| file << text.gsub("Framework", "funktrunkgunk") } end end