From 63fcc9c1bcfe5a5033344358fff13ab803f724a7 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sat, 28 Oct 2017 19:14:35 +0200 Subject: [PATCH] Fix compatibility with Bundler 1.6 Stop using `Bundler.settings.with`, because it will be removed from Bundler 1.6. Also, as described in #7653, we could use `Bundler.settings[:with]`, but that would be internal API again, so it probably breaks again in the future. That's why I added a `BundlerHelper` module to parse the required optional group from our config files, without the use of any internal Bundler API. Fixes #7653 --- config/application.rb | 4 +++- config/bundler_helper.rb | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 config/bundler_helper.rb 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