Sequel w Rails - skrypt do migracji

Opublikowane przez Jarosław Zabiełło Fri, 29 Feb 2008 03:17:00 GMT

Sequel posiada podobny mechanizm migracji co Active Record. Brakowało mi tylko taska Rake do podobnego szybkiego wędrowania w górę i w dół (historii zmian struktury tabel w bazie).

Poniższy kod (wystarczy dorzucić go gdzieś do Rakefile) wykorzystuje taką samą składnię wywołania, jaka jest używana w migracjach dla Active Record. Podczas pracy skryptu wyświetlane są także wszystkie wykonywane kwerendy SQL.

# Usage:
#
# rake sequel:migrate
# rake sequel:migrate VERSION=0
# rake sequel:migrate VERSION=3
#
desc 'Sequel migration'
namespace :sequel do
  require 'sequel'
  Rails::Initializer.run do |config|
    DB = Sequel(YAML.load_file(config.database_configuration_file)[RAILS_ENV])
    DB.logger = Logger.new($stdout)
  end
  task :migrate do    
    path = File.join(RAILS_ROOT, 'db', 'migrate')
    if ARGV[1] =~ /VERSION=\d+/
      Sequel::Migrator.apply(DB, path, ARGV[1].split('=')[1].to_i) 
    else
      Sequel::Migrator.apply(DB, path) 
    end
  end
end

Tagi  | 4 comments

Comments

  1. Avatar greno powiedział about 4 hours later:

    Rozczarowałem się sequelem, jak się okazało że sam muszę definiować primary key, przynajmniej w merb 0.5.3.

  2. Avatar Jarosław Zabiełło powiedział about 5 hours later:

    @greno: Co ty powiadasz? Nie musisz nic deklarować. Merb nie ma tu nic do rzeczy, bo Sequel jest kompletnie niezależną biblioteką.

  3. Avatar greno powiedział 3 days later:

    Może to dlatego, że wygenerowałem model przez resource (/script/generate resource mojresource title:string ..), może to dlatego że zastosowałem sqlite3. W każdy bądz razie zdziwiłem się jak w bazie po rake sequel:db:migrate nie było pola ID. Pewnie coś źle zrobilem, ale to dało mi do myślenia, że trzeba patrzeć co robi generator. PS. Czekam na Merb 1.0.

  4. Avatar rsz powiedział 9 days later:

    Automatyczna migracja? Nigdy w to nie uwierzę w poważnych środowiskach produkcyjnych, gdzie nie wchodzi w grę zdropowanie wszystkiego i założenie od nowa. Aktualnie w firmie mamy praktykę śledzenia tych zmian ręcznie (“patche” w SQLu) i… o dziwo sprawdza się praktycznie bezbłędnie.

(leave url/email »)

   Pomoc języka formatowania Obejrzyj komentarz