使用Ruby脚本中的.rvmrc文件

时间:2013-02-14 10:30:49

标签: ruby-on-rails ruby rvm thor

Backgound

首先要回答这个问题:Ruby on Rails最近有一些安全问题。所以我们需要更新我们项目的Rails版本。如果你有一些,那么如果你手工完成就会变得很快......所以我想我可以为此创建一个Thor任务。

问题

现在效果很好!但!在安装新版本的rails时,我需要尊重每个项目的.rvmrc文件。我希望这个脚本尽快成为OpenSourced,但我想解决首先不尊重.rvmrc文件的问题。

所以我需要的是在更改目录以更新Rails版本时使用正确的RVM ruby​​版本/ gemset的方法。

如何做到这一点?可以通过某种方式从Ruby脚本中完成它,以便它可以在Mac和Linux上运行,而不管Shell(找到zsh支持的答案,但那里的所有其他shell呢?)

快速示例代码:

#Scan the base directory down for Gemfiles
gem_files = File.join("**", "Gemfile")
Dir.glob(gem_files){|gemfile|
  project_folder = File.dirname(gemfile)
  puts "Found Gemfile in #{project_folder}"
  Dir.chdir(project_folder) do
    #TODO: Respect/load the rvmrc file in this directory
    update_gem_file(project_folder) #example
    run 'bundle update rails' #<--- needs to be done in the RVM gemset
  end
}

只是为了让你了解我正在尝试做什么。

链接到githubs上的脚本

The github repo for my script -- Work in Progress!

2 个答案:

答案 0 :(得分:1)

基本上查看这个项目https://github.com/versapay/bundler-auto-update

  

尝试将Gemfile的每个gem更新为最新的补丁,次要的是主要版本。运行测试命令以确保更新成功

至于RVM使用这个简单的代码:

#Scan the base directory down for Gemfiles
gem_files = File.join("**", "Gemfile")
Dir.glob(gem_files){|gemfile|
  project_folder = File.dirname(gemfile)
  puts "Found Gemfile in #{project_folder}"
  run "rvm in #{project_folder} do bundle-auto-update -c rake spec"
}

您可以在https://rvm.io

上找到有关使用RVM编写脚本的更多详细信息

答案 1 :(得分:0)

盲目升级Rails并不是一个好主意。至少运行测试套件以确保没有任何中断。在那之后你仍然想在应用程序上做一些QA,以确保你没有打破所有的东西。

然后,你怎么知道你正在更新的当前分支实际上是主要的开发分支?您不想创建“修补程序”分支并将其应用于生产开发分支吗?

但是,假设您已经设法升级所有应用,但它们仍未部署到生产环境中。