1

背景

最初にこの質問の背景を少し説明します。最近、Ruby on Rails にはセキュリティ上の問題がいくつかあります。そのため、プロジェクトの Rails バージョンを更新する必要があります。いくつかある場合、手動で行うとすぐに古くなります...だから、このためのトールタスクを作成できると考えました。

質問

これでうまくいきます!しかし!Rails の新しいバージョンをインストールするときは、プロジェクトごとに .rvmrc ファイルを尊重する必要があります。このスクリプトをすぐにオープンソース化してほしいのですが、最初に .rvmrc ファイルを尊重しないという問題に取り組みたいと思っています。

したがって、ディレクトリを変更してRailsバージョンを更新するときに、適切なRVM ruby​​バージョン/gemsetを使用する方法が必要です。

これはどのように行われるのでしょうか?シェルに関係なく、Mac と Linux で動作するように Ruby スクリプトから実行できますか (zsh サポートに関する回答が見つかりましたが、他のすべてのシェルはどうですか?)

簡単なコード例:

#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 のスクリプトへのリンク

私のスクリプトの github リポジトリ -- 作業中!

4

2 に答える 2

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 を使用したスクリプト作成の詳細を確認できます。

于 2013-02-14T14:31:50.697 に答える
0

Rails をやみくもにアップグレードするのは得策ではありません。少なくともテスト スイートを実行して、問題がないことを確認してください。その後、アプリで QA を実行して、すべてを壊していないことを確認します。

次に、更新している現在のブランチが実際にメインの開発ブランチであることをどのように確認しますか? 「ホットフィックス」ブランチを作成して、それを本番および開発ブランチに適用したくありませんか?

しかし、すべてのアプリをアップグレードできたとしましょう。それらはまだ本番環境にデプロイされていません。

于 2013-02-14T12:28:49.350 に答える