diff --git a/config/application.rb b/config/application.rb index f40f6b369..50524a735 100644 --- a/config/application.rb +++ b/config/application.rb @@ -4,9 +4,11 @@ require_relative 'boot' require 'rails/all' +require_relative "bundler_helper" + # Require the gems listed in Gemfile, including any gems # you've limited to :test, :development, or :production. -Bundler.require(*Rails.groups(*Bundler.settings.with)) +Bundler.require(*Rails.groups(BundlerHelper.database)) # Do not dump the limit of boolean fields on MySQL, # since that generates a db/schema.rb that's incompatible diff --git a/config/bundler_helper.rb b/config/bundler_helper.rb new file mode 100644 index 000000000..6ca9d6ba1 --- /dev/null +++ b/config/bundler_helper.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +require "yaml" + +module BundlerHelper + def self.rails_env + @rails_env ||= ENV["RAILS_ENV"] || + parse_value_from_file("diaspora.yml", "configuration", "server", "rails_environment") || + parse_value_from_file("defaults.yml", "defaults", "server", "rails_environment") + end + + def self.database + @adapter ||= parse_value_from_file("database.yml", rails_env, "adapter") + + raise "No database adapter found, please fix your config/database.yml!" unless @adapter + + @adapter.sub("mysql2", "mysql") + end + + private_class_method def self.parse_value_from_file(file, *keys) + path = File.join(__dir__, file) + return YAML.load_file(path).dig(*keys) if File.file?(path) + + puts "Configuration file #{path} not found, ensure it's present" # rubocop:disable Rails/Output + end +end