Существует ли драгоценный камень миграции базы данных Ruby, который помогает Вам переместить содержание от старой структуры до новой структуры?

Есть ли какие-либо драгоценные камни/библиотеки Ruby, которые помогают Вам мигрировать от старой структуры DB до новой структуры? Миграции 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, но я надеюсь, что волшебная библиотека имела бы намного больше, преобразовывает.

Berns

11
задан btelles 16 February 2010 в 12:12
поделиться

5 ответов

Я начал над этим работать.

Если кто-нибудь захочет дать совет по поводу лучшей / более идиоматической или более эффективной реализации, пожалуйста, дайте мне знать.

http: // github.com / btelles / legacy_migrations

edit :

Теперь у меня есть этот точный синтаксис, работающий над указанным выше репозиторием github ... планирую добавить несколько задач rake для сопоставления старой структуры с новыми классами ActiveRecord и многое другое трансформируется ... в случае, если кому-то интересно.

Это также на gemcutter / rubygems: gem install legacy_migrations

3
ответ дан 3 December 2019 в 11:36
поделиться
  1. настройте вашу базу данных в config/database.yml
  2. rake db:schema:dump
  3. преобразуйте schema.rb в db/migrate/001_create_database.rb
  4. вы можете создать другие миграции для поддержания схемы вашей базы данных
-1
ответ дан 3 December 2019 в 11:36
поделиться

Вы можете получить доступ ко всем вашим моделям из миграции и, таким образом, обрабатывать все миграции данных прямо там. Если вы уже знали это, и ваш вопрос был о более аккуратном способе сделать это, то, конечно, это не тот ответ, который вы ищете.

Одна из проблем вашего примера заключается в том, что вы не можете мигрировать вниз к более ранней версии, но только из-за возможности блока, которую вы демонстрируете в конверсиях.

Я признаю, что ваш пример красив и краток, но вот пример обычной миграции в любом случае:

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
2
ответ дан 3 December 2019 в 11:36
поделиться

Мне пришлось сделать что-то вроде (что я думаю) вы описываете, и я использовал для этого Sequel . Sequel легко адаптируется и в целом полезен, может работать с SQL напрямую в довольно удобной форме и может обращаться к различным типам баз данных.

Документация очень удобна, и я полностью ее рекомендую.

Вот пример использования сиквела, чтобы взять огромный произвольно плоский файл из geonames и использовать его для заполнения базы данных и выполнения запросов. Вероятно, это хороший пример того, как заставить что-то делать то, что вы хотите.

Это рельсы-агностик. не нужно прикреплять к модели, миграции или чему-либо еще, кроме пары драгоценных камней.

1
ответ дан 3 December 2019 в 11:36
поделиться

Существует довольно много способов перемещения баз данных без преобразований. Я помню, как ребята из Rails Envy говорили об одном самоцвете (но это было давно, и у меня нет времени копаться). Загляните на railsenvy.com?

.
0
ответ дан 3 December 2019 в 11:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: