Module: Thredded::DbTools
- Defined in:
- lib/thredded/db_tools.rb
Constant Summary collapse
- MIGRATION_SPEC_SOURCE_VERSION =
'v0.8'
Class Method Summary collapse
- .adapter ⇒ Object
- .config ⇒ Object
- .database ⇒ Object
- .dump(to = dump_file) ⇒ Object
- .dump_file ⇒ Object
- .host ⇒ Object
-
.migrate(paths:, quiet:, &filter) ⇒ Object
Runs the migrations in the given paths.
- .password ⇒ Object
- .restore(from = dump_file) ⇒ Object
- .silence_active_record ⇒ Object
- .username ⇒ Object
Class Method Details
.adapter ⇒ Object
83 84 85 |
# File 'lib/thredded/db_tools.rb', line 83 def adapter config['adapter'] end |
.config ⇒ Object
79 80 81 |
# File 'lib/thredded/db_tools.rb', line 79 def config @config ||= Rails.configuration.database_configuration[Rails.env] end |
.database ⇒ Object
87 88 89 |
# File 'lib/thredded/db_tools.rb', line 87 def database config['database'] end |
.dump(to = dump_file) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/thredded/db_tools.rb', line 33 def dump(to = dump_file) case adapter when /sqlite/i system ['sqlite3', Rails.root.join(database), '.dump', '>', to].join(' ') when /postgres/i cmd = "pg_dump --dbname=postgresql://#{username}:#{password}@#{host}:5432/#{database}" \ "--verbose --clean --no-owner --no-acl --format=c > #{to}" system cmd when /mysql/i system("mysqldump --user #{username} -p#{password} #{database} > #{to}") end end |
.dump_file ⇒ Object
29 30 31 |
# File 'lib/thredded/db_tools.rb', line 29 def dump_file File.("../../../spec/migration/#{MIGRATION_SPEC_SOURCE_VERSION}.#{adapter}.dump", __FILE__) end |
.host ⇒ Object
99 100 101 |
# File 'lib/thredded/db_tools.rb', line 99 def host config['host'] end |
.migrate(paths:, quiet:, &filter) ⇒ Object
Runs the migrations in the given paths.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/thredded/db_tools.rb', line 9 def migrate(paths:, quiet:, &filter) verbose_was = ActiveRecord::Migration.verbose ActiveRecord::Migration.verbose = !quiet migrate = if Rails.gem_version >= Gem::Version.new('6.0.0.rc2') -> { ActiveRecord::MigrationContext.new(paths, ActiveRecord::SchemaMigration).migrate(nil, &filter) } elsif Rails::VERSION::STRING >= '5.2' -> { ActiveRecord::MigrationContext.new(paths).migrate(nil, &filter) } else -> { ActiveRecord::Migrator.migrate(paths, &filter) } end if quiet silence_active_record(&migrate) else migrate.call end ensure ActiveRecord::Migration.verbose = verbose_was end |
.password ⇒ Object
95 96 97 |
# File 'lib/thredded/db_tools.rb', line 95 def password config['password'] end |
.restore(from = dump_file) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/thredded/db_tools.rb', line 46 def restore(from = dump_file) case adapter when /postgres/i cmd = [ 'pg_restore --verbose --clean --no-owner --no-acl', "--dbname=postgresql://#{username}:#{password}@#{host}:5432/#{database}", from, '>', Rails.root.join('log', 'restore.log') ].join(' ') system cmd when /mysql/i, /sqlite/i connection = ActiveRecord::Base.connection statements = File.read(from).split(/;$/) statements.pop silence_active_record do ActiveRecord::Base.transaction do statements.each do |statement| connection.execute(statement) unless statement =~ /(BEGIN TRANSACTION|COMMIT)/ end end end end end |
.silence_active_record ⇒ Object
71 72 73 74 75 76 77 |
# File 'lib/thredded/db_tools.rb', line 71 def silence_active_record was = ActiveRecord::Base.logger.level ActiveRecord::Base.logger.level = Logger::WARN yield ensure ActiveRecord::Base.logger.level = was end |
.username ⇒ Object
91 92 93 |
# File 'lib/thredded/db_tools.rb', line 91 def username config['username'] end |