debian-mirror-gitlab/lib/tasks/gitlab/setup.rake

62 lines
1.9 KiB
Ruby
Raw Normal View History

2014-09-02 18:07:02 +05:30
namespace :gitlab do
2015-09-11 14:41:01 +05:30
desc "GitLab | Setup production application"
2018-03-17 18:26:18 +05:30
task setup: :gitlab_environment do
2018-10-15 14:42:47 +05:30
check_gitaly_connection
2014-09-02 18:07:02 +05:30
setup_db
end
2018-10-15 14:42:47 +05:30
def check_gitaly_connection
Gitlab.config.repositories.storages.each do |name, _details|
Gitlab::GitalyClient::ServerService.new(name).info
end
rescue GRPC::Unavailable => ex
puts "Failed to connect to Gitaly...".color(:red)
puts "Error: #{ex}"
exit 1
end
2014-09-02 18:07:02 +05:30
def setup_db
warn_user_is_not_gitlab
unless ENV['force'] == 'yes'
puts "This will create the necessary database tables and seed the database."
puts "You will lose any previous data stored in the database."
ask_to_continue
puts ""
end
2019-05-18 00:54:41 +05:30
# In production, we might want to prevent ourselves from shooting
# ourselves in the foot, so let's only do this in a test or
# development environment.
terminate_all_connections unless Rails.env.production?
2016-06-02 11:05:42 +05:30
Rake::Task["db:reset"].invoke
2014-09-02 18:07:02 +05:30
Rake::Task["add_limits_mysql"].invoke
2015-10-24 18:46:33 +05:30
Rake::Task["setup_postgresql"].invoke
2014-09-02 18:07:02 +05:30
Rake::Task["db:seed_fu"].invoke
rescue Gitlab::TaskAbortedByUserError
puts "Quitting...".color(:red)
2014-09-02 18:07:02 +05:30
exit 1
end
2019-05-18 00:54:41 +05:30
# If there are any clients connected to the DB, PostgreSQL won't let
# you drop the database. It's possible that Sidekiq, Unicorn, or
# some other client will be hanging onto a connection, preventing
# the DROP DATABASE from working. To workaround this problem, this
# method terminates all the connections so that a subsequent DROP
# will work.
def self.terminate_all_connections
return false unless Gitlab::Database.postgresql?
cmd = <<~SQL
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE datname = current_database()
AND pid <> pg_backend_pid();
SQL
ActiveRecord::Base.connection.execute(cmd)&.result_status == PG::PGRES_TUPLES_OK
rescue ActiveRecord::NoDatabaseError
end
2014-09-02 18:07:02 +05:30
end