Merge branch 'jprovazn-rails5-mysql-datetime' into 'master'
[Rails5] Fix MysqlDateTimeWithTimeZone in rails 5 Closes #46275 See merge request gitlab-org/gitlab-ce!19613
This commit is contained in:
commit
7668c9660f
4 changed files with 31 additions and 8 deletions
|
@ -5,6 +5,12 @@ require 'rails/all'
|
|||
Bundler.require(:default, Rails.env)
|
||||
|
||||
module Gitlab
|
||||
# This method is used for smooth upgrading from the current Rails 4.x to Rails 5.0.
|
||||
# https://gitlab.com/gitlab-org/gitlab-ce/issues/14286
|
||||
def self.rails5?
|
||||
ENV["RAILS5"].in?(%w[1 true])
|
||||
end
|
||||
|
||||
class Application < Rails::Application
|
||||
require_dependency Rails.root.join('lib/gitlab/redis/wrapper')
|
||||
require_dependency Rails.root.join('lib/gitlab/redis/cache')
|
||||
|
@ -14,6 +20,11 @@ module Gitlab
|
|||
require_dependency Rails.root.join('lib/gitlab/current_settings')
|
||||
require_dependency Rails.root.join('lib/gitlab/middleware/read_only')
|
||||
|
||||
# This needs to be loaded before DB connection is made
|
||||
# to make sure that all connections have NO_ZERO_DATE
|
||||
# setting disabled
|
||||
require_dependency Rails.root.join('lib/mysql_zero_date')
|
||||
|
||||
# Settings in config/environments/* take precedence over those specified here.
|
||||
# Application configuration should go into files in config/initializers
|
||||
# -- all .rb files in that directory are automatically loaded.
|
||||
|
@ -211,10 +222,4 @@ module Gitlab
|
|||
Gitlab::Routing.add_helpers(MilestonesRoutingHelper)
|
||||
end
|
||||
end
|
||||
|
||||
# This method is used for smooth upgrading from the current Rails 4.x to Rails 5.0.
|
||||
# https://gitlab.com/gitlab-org/gitlab-ce/issues/14286
|
||||
def self.rails5?
|
||||
ENV["RAILS5"].in?(%w[1 true])
|
||||
end
|
||||
end
|
||||
|
|
|
@ -65,7 +65,7 @@ elsif Gitlab::Database.mysql?
|
|||
prepend RegisterDateTimeWithTimeZone
|
||||
|
||||
# Add the class `DateTimeWithTimeZone` so we can map `timestamp` to it.
|
||||
class MysqlDateTimeWithTimeZone < MysqlDateTime
|
||||
class MysqlDateTimeWithTimeZone < (Gitlab.rails5? ? ActiveRecord::Type::DateTime : MysqlDateTime)
|
||||
def type
|
||||
:datetime_with_timezone
|
||||
end
|
||||
|
|
|
@ -4,7 +4,7 @@ class MergeRequestDiffFileLimitsToMysql < ActiveRecord::Migration
|
|||
def up
|
||||
return unless Gitlab::Database.mysql?
|
||||
|
||||
change_column :merge_request_diff_files, :diff, :text, limit: 2147483647
|
||||
change_column :merge_request_diff_files, :diff, :text, limit: 2147483647, default: nil
|
||||
end
|
||||
|
||||
def down
|
||||
|
|
18
lib/mysql_zero_date.rb
Normal file
18
lib/mysql_zero_date.rb
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Disable NO_ZERO_DATE mode for mysql in rails 5.
|
||||
# We use zero date as a default value
|
||||
# (config/initializers/active_record_mysql_timestamp.rb), in
|
||||
# Rails 5 using zero date fails by default (https://gitlab.com/gitlab-org/gitlab-ce/-/jobs/75450216)
|
||||
# and NO_ZERO_DATE has to be explicitly disabled. Disabling strict mode
|
||||
# is not sufficient.
|
||||
|
||||
require 'active_record/connection_adapters/abstract_mysql_adapter'
|
||||
|
||||
module MysqlZeroDate
|
||||
def configure_connection
|
||||
super
|
||||
|
||||
@connection.query "SET @@SESSION.sql_mode = REPLACE(@@SESSION.sql_mode, 'NO_ZERO_DATE', '');" # rubocop:disable Gitlab/ModuleWithInstanceVariables
|
||||
end
|
||||
end
|
||||
|
||||
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.prepend(MysqlZeroDate) if Gitlab.rails5?
|
Loading…
Reference in a new issue