123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- return if ActiveRecord::Base.connection_config[:adapter] != 'mysql2'
- Rails.application.config.db_4bytes_utf8 = false
- Rails.application.config.db_null_byte = true
- connection = ActiveRecord::Base.connection
- # rubocop:disable Rails/Output
- # rubocop:disable Rails/Exit
- # rubocop:disable Layout/IndentHeredoc
- # Version check --------------------------------------------------------------
- # mysql example: "5.7.3"
- # mariadb example: "10.1.17-MariaDB"
- server_version = connection.execute('SELECT @@version;').first.first
- raise 'Unable to retrive database version' if server_version.blank?
- version_number = Gem::Version.new(server_version.split('-').first)
- vendor = server_version.split('-').second || 'MySQL'
- case vendor
- when 'MySQL'
- if version_number < Gem::Version.new('5.6')
- printf "\e[31m" # ANSI red
- puts <<~MSG
- Error: Incompatible database backend version
- (MySQL 5.6+ required; #{version_number} found)
- MSG
- printf "\e[0m" # ANSI normal
- exit 1
- end
- when 'MariaDB'
- if version_number < Gem::Version.new('10.0')
- printf "\e[31m" # ANSI red
- puts <<~MSG
- Error: Incompatible database backend version
- (MariaDB 10.0+ required; #{version_number} found)
- MSG
- printf "\e[0m" # ANSI normal
- exit 1
- end
- end
- # Configuration check --------------------------------------------------------
- # Before MySQL 8.0, the default value of max_allowed_packet was 1MB - 4MB,
- # which is impractically small and can lead to failures processing emails.
- #
- # See https://github.com/zammad/zammad/issues/1759
- # https://github.com/zammad/zammad/issues/1970
- # https://github.com/zammad/zammad/issues/2034
- max_allowed_packet = connection.execute('SELECT @@max_allowed_packet;').first.first
- max_allowed_packet_mb = max_allowed_packet / 1024 / 1024
- if max_allowed_packet_mb <= 4
- printf "\e[31m" # ANSI red
- puts <<~MSG
- Error: Database config value 'max_allowed_packet' too small (#{max_allowed_packet_mb}MB)
- Please increase this value in your #{vendor} configuration (64MB+ recommended).
- MSG
- printf "\e[0m" # ANSI normal
- exit 1
- end
- if connection.execute("SHOW tables LIKE 'settings';").any? &&
- Setting.get('postmaster_max_size').present? &&
- Setting.get('postmaster_max_size').to_i > max_allowed_packet_mb
- printf "\e[33m" # ANSI yellow
- puts <<~MSG
- Warning: Database config value 'max_allowed_packet' less than Zammad setting 'Maximum Email Size'
- Zammad will fail to process emails (both incoming and outgoing)
- larger than the value of 'max_allowed_packet' (#{max_allowed_packet_mb}MB).
- Please increase this value in your #{vendor} configuration accordingly.
- MSG
- printf "\e[0m" # ANSI normal
- end
- # rubocop:enable Rails/Exit
- # rubocop:enable Rails/Output
- # rubocop:enable Layout/IndentHeredoc
|