-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRakefile
57 lines (51 loc) · 1.5 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
require 'sequel'
require 'sequel/extensions/migration'
require 'rake'
require 'yaml'
require 'erb'
namespace :db do
desc "Create the database"
task :create do
env = ENV['RACK_ENV'] || 'development'
erb_out = ERB.new(File.read('config/database.yml')).result
config = YAML.load(erb_out)[env]
db_name = config['database']
db_user = config['user']
db_password = config['password']
db_host = config['host']
begin
Sequel.connect(
adapter: config['adapter'],
host: db_host,
user: db_user,
password: db_password,
database: 'postgres'
) do |db|
# Check if the database exists
existing_dbs = db.fetch("SELECT datname FROM pg_database WHERE datname = ?", db_name).all
if existing_dbs.empty?
db.run "CREATE DATABASE #{db_name}"
puts "Database #{db_name} created"
else
puts "Database #{db_name} already exists"
end
end
rescue Sequel::DatabaseError => e
puts "Database creation failed: #{e.message}"
end
end
desc 'Migrate the database'
task :migrate do
require_relative 'config/initializer/database'
Sequel.extension :migration
Sequel::Migrator.run(DB, 'db/migrate')
end
desc 'Rollback all migrations'
task :rollback_all do
require_relative 'config/initializer/database'
Sequel.extension :migration
Sequel::Migrator.run(DB, 'db/migrate', target: 0)
end
desc 'Reset the database'
task reset: [:rollback_all, :migrate]
end