mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
We have had errors reported due to migrations breaking and are reverting
these series of commits. See: https://meta.discourse.org/t/new-installation-fails-on-migration/147425 This reverts commit80e832662b. This reverts commitde5f2d3308. This reverts commit6b192d29fa. This reverts commita5b582f686. This reverts commit708dd97dfd.
This commit is contained in:
@@ -1,11 +1,5 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
# We do not run this in production cause it is intrusive and has
|
|
||||||
# potential to break stuff, it also breaks under concurrent use
|
|
||||||
# which rake:multisite_migrate uses
|
|
||||||
#
|
|
||||||
# The protection is only needed in Dev and Test
|
|
||||||
if ENV['RAILS_ENV'] != "production"
|
|
||||||
require_dependency 'migration/safe_migrate'
|
require_dependency 'migration/safe_migrate'
|
||||||
|
|
||||||
Migration::SafeMigrate.patch_active_record!
|
Migration::SafeMigrate.patch_active_record!
|
||||||
end
|
|
||||||
|
|||||||
@@ -66,106 +66,6 @@ task 'db:rollback' => ['environment', 'set_locale'] do |_, args|
|
|||||||
Rake::Task['db:_dump'].invoke
|
Rake::Task['db:_dump'].invoke
|
||||||
end
|
end
|
||||||
|
|
||||||
# our optimized version of multisite migrate, we have many sites and we have seeds
|
|
||||||
# this ensures we can run migrations concurrently to save huge amounts of time
|
|
||||||
Rake::Task['multisite:migrate'].clear
|
|
||||||
|
|
||||||
class StdOutDemux
|
|
||||||
def initialize(stdout)
|
|
||||||
@stdout = stdout
|
|
||||||
@data = {}
|
|
||||||
end
|
|
||||||
|
|
||||||
def write(data)
|
|
||||||
(@data[Thread.current] ||= +"") << data
|
|
||||||
end
|
|
||||||
|
|
||||||
def close
|
|
||||||
finish_chunk
|
|
||||||
end
|
|
||||||
|
|
||||||
def finish_chunk
|
|
||||||
data = @data[Thread.current]
|
|
||||||
if data
|
|
||||||
@stdout.write(data)
|
|
||||||
@data.delete Thread.current
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
task 'multisite:migrate' => ['db:load_config', 'environment', 'set_locale'] do |_, args|
|
|
||||||
if ENV["RAILS_ENV"] != "production"
|
|
||||||
raise "Multisite migrate is only supported in production"
|
|
||||||
end
|
|
||||||
|
|
||||||
concurrency = (ENV['MIGRATE_CONCURRENCY'].presence || "20").to_i
|
|
||||||
|
|
||||||
puts "Multisite migrator is running using #{concurrency} threads"
|
|
||||||
puts
|
|
||||||
|
|
||||||
queue = Queue.new
|
|
||||||
exceptions = Queue.new
|
|
||||||
|
|
||||||
old_stdout = $stdout
|
|
||||||
$stdout = StdOutDemux.new($stdout)
|
|
||||||
|
|
||||||
RailsMultisite::ConnectionManagement.each_connection do |db|
|
|
||||||
queue << db
|
|
||||||
end
|
|
||||||
|
|
||||||
concurrency.times { queue << :done }
|
|
||||||
|
|
||||||
SeedFu.quiet = true
|
|
||||||
|
|
||||||
(1..concurrency).map do
|
|
||||||
Thread.new {
|
|
||||||
while true
|
|
||||||
db = queue.pop
|
|
||||||
break if db == :done
|
|
||||||
|
|
||||||
RailsMultisite::ConnectionManagement.with_connection(db) do
|
|
||||||
begin
|
|
||||||
puts "Migrating #{db}"
|
|
||||||
ActiveRecord::Tasks::DatabaseTasks.migrate
|
|
||||||
SeedFu.seed(DiscoursePluginRegistry.seed_paths)
|
|
||||||
if !Discourse.skip_post_deployment_migrations? && ENV['SKIP_OPTIMIZE_ICONS'] != '1'
|
|
||||||
SiteIconManager.ensure_optimized!
|
|
||||||
end
|
|
||||||
rescue => e
|
|
||||||
exceptions << [db, e]
|
|
||||||
ensure
|
|
||||||
begin
|
|
||||||
$stdout.finish_chunk
|
|
||||||
rescue => ex
|
|
||||||
STDERR.puts ex.inspect
|
|
||||||
STDERR.puts ex.backtrace
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
}
|
|
||||||
end.each(&:join)
|
|
||||||
|
|
||||||
$stdout = old_stdout
|
|
||||||
|
|
||||||
if exceptions.length > 0
|
|
||||||
STDERR.puts
|
|
||||||
STDERR.puts "-" * 80
|
|
||||||
STDERR.puts "#{exceptions.length} migrations failed!"
|
|
||||||
while !exceptions.empty?
|
|
||||||
db, e = exceptions.pop
|
|
||||||
STDERR.puts
|
|
||||||
STDERR.puts "Failed to migrate #{db}"
|
|
||||||
STDERR.puts e.inspect
|
|
||||||
STDERR.puts e.backtrace
|
|
||||||
STDERR.puts
|
|
||||||
end
|
|
||||||
exit 1
|
|
||||||
end
|
|
||||||
|
|
||||||
Rake::Task['db:_dump'].invoke
|
|
||||||
end
|
|
||||||
|
|
||||||
# we need to run seed_fu every time we run rake db:migrate
|
# we need to run seed_fu every time we run rake db:migrate
|
||||||
task 'db:migrate' => ['load_config', 'environment', 'set_locale'] do |_, args|
|
task 'db:migrate' => ['load_config', 'environment', 'set_locale'] do |_, args|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user