0

私は Redmine で 600 以上の問題を抱えたプロジェクトを持っていました。すべての問題を別のプロジェクトに移動しました。この移動によってカスタム フィールドのすべてのデータが削除されるとは思いもしませんでした。

したがって、すべてのカスタム フィールド値が失われます。このアクションの前にデータベースをバックアップしませんでした。移動は UI のネイティブ機能であるため、問題を移動することで害を及ぼすとはまったく考えていなかったからです。

私が気づいたのは、すべての作成と更新のイベントが production.log に含まれていることです。私の 600 号はすべて制作ログで順番に並んでいます。これらのログ ステートメントを使用してアクションを繰り返すにはどうすればよいですか? すべてのログ アクションをインポートできれば、それが書き込むカスタム フィールドを元の Redmine インスタンスに移行して、値を復元できます。

エントリは次のようになります。

Processing IssuesController#update (for XX.XX.XX.X at 2013-02-07 11:19:54) [PUT]
Parameters: {"_method"=>"put", "authenticity_token"=>"nWNSSRYjHhN0BGb+Ya8M4pYWPPgsfdM=", "issue"=>{"assigned_to_id"=>"", "custom_field_values"=>{"10"=>"", "5"=>"Not translated", "1"=>"fi", "8"=>"http://screencast.com/t/ODknR8K", "9"=>"", "3"=>"", "4"=>""}, "done_ratio"=>"0", "due_date"=>"", "priority_id"=>"4", "estimated_hours"=>"", "start_date"=>"2013-02-07", "subject"=>"1\tInstallation in English", "tracker_id"=>"1", "lock_version"=>"0", "description"=>"Steps:\r\nOpen Nitro\r\n\r\nProblem:\r\nNot localized"}, "controller"=>"issues", "time_entry"=>{"hours"=>"", "activity_id"=>"", "comments"=>""}, "attachments"=>{"1"=>{"description"=>""}}, "id"=>"3876", "action"=>"update", "commit"=>"Submit", "notes"=>""}

方法があることを本当に望んでいます。どんな助けでも大歓迎です

4

2 に答える 2

0

「Parameters:」に続くログ エントリは、通常の Ruby ハッシュ定義のように見えます。それを解析してeval、ハッシュ変数に戻します。

そこから、要素を剥がしてデータベースに挿入する必要があります。私は Sequel を使用してそれを行いますが、あなたに合ったものを使用してください。

RedMine のサポート担当者と話し、テーブルのスキーマを取得して、どのデータがどこに行き、必要なデータベース ドライバーを把握できるようにします。

于 2013-02-16T11:10:12.063 に答える
0

適切なテキスト エディターやスプレッドシート アプリケーションを使用して、大規模な検索と置換を行い、一連の UPDATE SQL コマンドを構築して、データベース上で直接実行することができます (最初にテスト!!)。

  • ログから抽出
  • 不要な情報を削除
  • スプレッドシートにコピー
  • テキストを列に分割する
  • 必要なSQLコマンド「UPDATE SETなど」を使用して列を追加し、この列のすべての行にコピーします。
  • 列を結合して、行ごとに 1 つのテキスト コマンドを作成します
  • 結合されたデータをテキスト ファイルにエクスポートする
  • テスト データベースに対して SQL として実行
  • すべてがうまくいけば、本番データベースに対してSQLとして実行します
于 2013-02-16T10:07:33.880 に答える