11

古いDB構造から新しい構造への移行に役立つRubygem/ライブラリはありますか?ActiveRecordの移行は、新しいデータベース構造を追跡するのに役立ちますが、レガシーデータベース全体を新しい構造に移行するのに役立つ何かがあるのではないかと思います。

transfer_from(:source_table => 'person', :destination_table => 'dudes_and_dudets') do

  from :name, :to => :full_name

  from :dob, :to => :age do |dob|    # this would, for example, load the result  
    (Date.today - dob)/60/60/24/365  # of the block into :age
  end

end

(これらの変換はARでも同じように簡単に実行できると思いますが、マジックライブラリにさらに多くの変換が含まれることを期待しています。

ベルンズ

4

6 に答える 6

3

私はこれに取り組み始めました。

より良い/より慣用的な、またはより効率的な実装に関するヒントを誰かが提供したい場合は、私に知らせてください。

http://github.com/btelles/legacy_migrations

編集

これで、この正確な構文が上記のgithubリポジトリで機能するようになりました...古い構造を新しいActiveRecordクラスにマッピングするためのいくつかのrakeタスクと、さらに多くの変換を追加する予定です...誰かが興味を持った場合に備えて。

gemcutter / ruby​​gemsにもあります:gem install legend_migrations

于 2010-02-24T13:47:28.413 に答える
2

移行内からすべてのモデルにアクセスできるため、すべてのデータ移行もそこで処理できます。あなたがすでにこれを知っていて、あなたの質問がそれを行うためのよりきちんとした方法についてだったなら、もちろんこれはあなたが探している答えではありません。

この例の問題の1つは、以前のバージョンに移行できないことですが、これは、変換で示すブロック機能のためだけです。

私はあなたの例が素晴らしく簡潔であることを認めます、しかしここにとにかく定期的な移行の例があります:

class FooBar < ActiveRecord::Migration
  def self.up
    # This is only needed if the new table will have the same name.
    # Move the old one aside.
    rename_table :users, :old_users

    # The new table structure
    create_table :users do |t|
      t.string :full_name
      t.date   :age
    end

    # Data migration
    OldUsers.all.each do |orig|
      User.create!(
        :full_name => orig.name,
        :age => (Date.today - orig.dob)/60/60/24/365
      )
    end

    # Clean up
    drop_table :old_users
  end

  def self.down
    # Exercise for the reader!
  end
end

# Temporary class for accessing the old table during conversion
class OldUsers < ActiveRecord::Base; end
于 2010-02-19T19:22:25.023 に答える
1

私はあなたが説明しているような(私が思うに)何かをしなければならなかった、そして私はそれのために続編を使った。Sequelは適応性があり、一般的に便利であり、SQLをかなり便利な方法で直接操作でき、複数の異なる種類のDBにアクセスできます。

ドキュメントは非常に便利で、私はそれを完全にお勧めします。

これは、続編を使用してgeonamesから任意の巨大なフラットファイルを取得し、それを使用してdbに入力し、クエリを実行する例です。これはおそらく、あなたがやりたいことをするために何かを作るための良い例です。

レールに依存しません。モデル、移行、またはいくつかの宝石以外のものにアタッチする必要はありません。

于 2010-02-21T23:55:54.733 に答える
0

変換なしでデータベースを移動するためのかなりの数があります。Rails Envyの人たちが宝石について話していたのを覚えています(しかし、それはしばらく前で、掘りに行く時間がありません)。railsenvy.comをご覧ください。

于 2010-02-19T17:19:31.657 に答える
0

レガシーデータをRailsアプリケーションに移行するのに最適なTruckerGemをご覧ください。レガシーデータベースのテーブルごとにアクティブレコードオブジェクトを作成し、それらをapp / models/legacyに配置します。これらのクラス内で、新しいクラスへのマッピング方法を定義できます。

于 2011-02-24T09:51:08.137 に答える
-1
  1. config/database.ymlでデータベースを構成します
  2. rake db:schema:dump
  3. schema.rbをdb/migrate/001_create_database.rbに変換します
  4. データベーススキーマを維持するために他の移行を生成できます
于 2010-02-16T05:01:20.220 に答える