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)
|
Bundler.require(:default, Rails.env)
|
||||||
|
|
||||||
module Gitlab
|
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
|
class Application < Rails::Application
|
||||||
require_dependency Rails.root.join('lib/gitlab/redis/wrapper')
|
require_dependency Rails.root.join('lib/gitlab/redis/wrapper')
|
||||||
require_dependency Rails.root.join('lib/gitlab/redis/cache')
|
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/current_settings')
|
||||||
require_dependency Rails.root.join('lib/gitlab/middleware/read_only')
|
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.
|
# Settings in config/environments/* take precedence over those specified here.
|
||||||
# Application configuration should go into files in config/initializers
|
# Application configuration should go into files in config/initializers
|
||||||
# -- all .rb files in that directory are automatically loaded.
|
# -- all .rb files in that directory are automatically loaded.
|
||||||
|
@ -211,10 +222,4 @@ module Gitlab
|
||||||
Gitlab::Routing.add_helpers(MilestonesRoutingHelper)
|
Gitlab::Routing.add_helpers(MilestonesRoutingHelper)
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
|
@ -65,7 +65,7 @@ elsif Gitlab::Database.mysql?
|
||||||
prepend RegisterDateTimeWithTimeZone
|
prepend RegisterDateTimeWithTimeZone
|
||||||
|
|
||||||
# Add the class `DateTimeWithTimeZone` so we can map `timestamp` to it.
|
# Add the class `DateTimeWithTimeZone` so we can map `timestamp` to it.
|
||||||
class MysqlDateTimeWithTimeZone < MysqlDateTime
|
class MysqlDateTimeWithTimeZone < (Gitlab.rails5? ? ActiveRecord::Type::DateTime : MysqlDateTime)
|
||||||
def type
|
def type
|
||||||
:datetime_with_timezone
|
:datetime_with_timezone
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,7 @@ class MergeRequestDiffFileLimitsToMysql < ActiveRecord::Migration
|
||||||
def up
|
def up
|
||||||
return unless Gitlab::Database.mysql?
|
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
|
end
|
||||||
|
|
||||||
def down
|
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