【问题标题】:Use a .rvmrc file from a Ruby script使用 Ruby 脚本中的 .rvmrc 文件
【发布时间】:2013-02-14 10:30:49
【问题描述】:

背景

首先了解一下这个问题的背景知识:Ruby on Rails 最近存在一些安全问题。所以我们需要更新我们项目的 Rails 版本。如果你有几个,如果你手工做的话,它会很快变老......所以我想我可以为此创建一个 Thor 任务。

问题

现在效果很好!但!在安装新版本的 rails 时,我需要尊重每个项目的 .rvmrc 文件。我希望这个脚本尽快开源,但我想先解决不尊重 .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
}

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

github上的脚本链接

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

【问题讨论】:

  • 不要链接到您的代码,提供它的剥离/最小版本并将其附加到您的问题中。该链接最终会断开,这将使您的问题对未来寻求类似答案的其他人来说毫无价值或毫无价值。

标签: ruby-on-rails ruby rvm thor


【解决方案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 编写脚本的更多详细信息

【讨论】:

    【解决方案2】:

    盲目升级 Rails 不是一个好主意。至少运行您的测试套件以确保没有任何问题。之后,您仍想对应用进行一些 QA,以确保您没有破坏所有内容。

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

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

    【讨论】:

    • 就像你说的,盲目升级 Rails 可能并不适合所有人,就像不自动部署它们一样!那会更糟(如果它真的坏了怎么办?)恕我直言。我会采纳你的建议创建一个分支并在那里执行更新,只是为了保存。
    猜你喜欢
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2015-05-01
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多