Skip to content

Instantly share code, notes, and snippets.

@Rhoxio
Last active December 3, 2023 04:17

Revisions

  1. Rhoxio renamed this gist Mar 19, 2020. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. Rhoxio revised this gist Mar 19, 2020. 1 changed file with 5 additions and 0 deletions.
    5 changes: 5 additions & 0 deletions config.yml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,5 @@
    # config/database.yml
    host: 'localhost'
    adapter: 'postgresql'
    encoding: utf-8
    database: 'test'
  3. Rhoxio created this gist Mar 19, 2020.
    67 changes: 67 additions & 0 deletions Rakefile
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,67 @@
    require "active_record"

    namespace :db do

    db_config = YAML::load(File.open('config/database.yml'))
    db_config_admin = db_config.merge({'database' => 'postgres', 'schema_search_path' => 'public'})

    desc "Create the database"
    task :create do
    ActiveRecord::Base.establish_connection(db_config_admin)
    ActiveRecord::Base.connection.create_database(db_config["database"])
    puts "Database created."
    end

    desc "Migrate the database"
    task :migrate do
    ActiveRecord::Base.establish_connection(db_config)
    ActiveRecord::Tasks::DatabaseTasks.migrate
    Rake::Task["db:schema"].invoke
    puts "Database migrated."
    end

    desc "Drop the database"
    task :drop do
    ActiveRecord::Base.establish_connection(db_config_admin)
    ActiveRecord::Base.connection.drop_database(db_config["database"])
    puts "Database deleted."
    end

    desc "Reset the database"
    task :reset => [:drop, :create, :migrate]

    desc 'Create a db/schema.rb file that is portable against any DB supported by AR'
    task :schema do
    ActiveRecord::Base.establish_connection(db_config)
    require 'active_record/schema_dumper'
    filename = "db/schema.rb"
    File.open(filename, "w:utf-8") do |file|
    ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
    end
    end

    end

    namespace :g do
    desc "Generate migration"
    task :migration do
    name = ARGV[1] || raise("Specify name: rake g:migration your_migration")
    timestamp = Time.now.strftime("%Y%m%d%H%M%S")
    path = File.expand_path("../db/migrate/#{timestamp}_#{name}.rb", __FILE__)
    migration_class = name.split("_").map(&:capitalize).join

    File.open(path, 'w') do |file|
    file.write <<-EOF
    class #{migration_class} < ActiveRecord::Migration[6.0]
    def self.up
    end
    def self.down
    end
    end
    EOF
    end

    puts "Migration #{path} created"
    abort # needed stop other tasks
    end
    end