diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 018254996..c4ffa27ba 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -1,14 +1,14 @@ class Ci::CloudAccountsController < Ci::BaseController include Ci::CloudAccountManageable + skip_before_action :connect_to_ci_database, only: %i[create bind] before_action :load_project, only: %i[create activate] before_action :authorize_owner_project!, only: %i[create activate] before_action :load_repo, only: %i[activate] before_action :find_cloud_account, only: %i[show] before_action :validate_params!, only: %i[create bind] before_action only: %i[create bind] do - master_db = true - connect_to_ci_database(master_db) + connect_to_ci_database(master_db: true) end def create diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index a0ffb4ce7..f834c6b44 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -24,8 +24,13 @@ module Ci::CloudAccountManageable user_id: current_user.id) oauth.save! - # 初始化ci端数据库 - ci_db_structure!(@connection, "#{current_user.login}_drone") + # 创建数据ci端数据库 + database_result = auto_create_database!(@connection, "#{current_user.login}_drone") + cloud_account = nil and return unless database_result.present? + + # 初始化表结构 + sub_connection = connect_to_ci_database + auto_create_table_structure!(sub_connection) rpc_secret = SecureRandom.hex 16 logger.info "######### rpc_secret: #{rpc_secret}" diff --git a/app/controllers/concerns/ci/db_connectable.rb b/app/controllers/concerns/ci/db_connectable.rb index 935d6473a..228221b3e 100644 --- a/app/controllers/concerns/ci/db_connectable.rb +++ b/app/controllers/concerns/ci/db_connectable.rb @@ -5,7 +5,8 @@ module Ci::DbConnectable end # Dynamically sets the database connection. - def connect_to_ci_database(master_db=false) + def connect_to_ci_database(options={}) + master_db = options[:master_db] || false config = Rails.application.config_for(:configuration).symbolize_keys! db_config = config[:ci_db_server].symbolize_keys! raise 'ci database config missing' if db_config.blank? @@ -14,22 +15,24 @@ module Ci::DbConnectable host: db_config[:host], username: db_config[:username], password: db_config[:password], - port: db_config[:port], - database: master_db === true ? db_config[:database] : "#{current_user.login}_#{db_config[:database]}" + port: db_config[:port] } + req_params = req_params.merge(database: "#{current_user.login}_#{db_config[:database]}") unless master_db === true + db_params = Ci::Database.get_connection_params(req_params) - @connection = Ci::Database.set_connection(db_params) + @connection = Ci::Database.set_connection(db_params).connection end - def ci_db_structure!(connection, database) - result = connection.execute("CREATE DATABASE #{database}") - return false unless result.present? + def auto_create_database!(connection, database) + connection.execute("CREATE DATABASE #{database}") + end + def auto_create_table_structure!(connection) # Ci::Schema.execute(username, password, port, host, database) # con_result = @connection.execute(Ci::Schema.statement) Ci::Schema.statement.split(';').map(&:strip).each do |sql| - con_result = @connection.execute(sql) + con_result = connection.execute(sql) Rails.logger.info "=============> ci create tabels result: #{con_result}" end end