From 4a7e97da12ad6871457167a5e9a7dd7e18d82589 Mon Sep 17 00:00:00 2001 From: Donal McBreen Date: Tue, 10 Sep 2024 15:48:05 +0100 Subject: [PATCH] Default to cache.yml instead of solid_cache.yml We'll fall back to the old filename if cache.yml doesn't exist. --- README.md | 8 ++++---- Rakefile | 2 +- .../solid_cache/install/install_generator.rb | 2 +- .../{solid_cache.yml.tt => cache.yml.tt} | 0 lib/solid_cache/engine.rb | 11 +++++++---- test/dummy/config/application.rb | 6 +----- .../config/{solid_cache.yml => cache.yml} | 0 ...e_connects_to.yml => cache_connects_to.yml} | 0 ...d_cache_database.yml => cache_database.yml} | 0 ...cache_encrypted.yml => cache_encrypted.yml} | 0 ...d_custom.yml => cache_encrypted_custom.yml} | 0 ...e_no_database.yml => cache_no_database.yml} | 0 ...solid_cache_shards.yml => cache_shards.yml} | 0 ...nts.yml => cache_unprepared_statements.yml} | 0 .../solid_cache/install_generator_test.rb | 4 ++-- test/models/solid_cache/record_test.rb | 18 +++++++++--------- test/test_helper.rb | 4 ++-- test/unit/encryption_test.rb | 6 +++--- test/unit/stats_test.rb | 2 +- 19 files changed, 31 insertions(+), 32 deletions(-) rename lib/generators/solid_cache/install/templates/config/{solid_cache.yml.tt => cache.yml.tt} (100%) rename test/dummy/config/{solid_cache.yml => cache.yml} (100%) rename test/dummy/config/{solid_cache_connects_to.yml => cache_connects_to.yml} (100%) rename test/dummy/config/{solid_cache_database.yml => cache_database.yml} (100%) rename test/dummy/config/{solid_cache_encrypted.yml => cache_encrypted.yml} (100%) rename test/dummy/config/{solid_cache_encrypted_custom.yml => cache_encrypted_custom.yml} (100%) rename test/dummy/config/{solid_cache_no_database.yml => cache_no_database.yml} (100%) rename test/dummy/config/{solid_cache_shards.yml => cache_shards.yml} (100%) rename test/dummy/config/{solid_cache_unprepared_statements.yml => cache_unprepared_statements.yml} (100%) diff --git a/README.md b/README.md index d6802ba..472fedd 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Solid Cache is configured by default in new Rails 8 applications. But if you're 1. `bundle add solid_cache` 2. `bin/rails solid_cache:install` -This will configure Solid Cache as the production cache store, create `config/solid_cache.yml`, and create `db/cache_schema.rb`. +This will configure Solid Cache as the production cache store, create `config/cache.yml`, and create `db/cache_schema.rb`. You will then have to add the configuration for the queue database in `config/database.yml`. If you're using sqlite, it'll look like this: @@ -43,7 +43,7 @@ Then run `db:prepare` in production to ensure the database is created and the sc ## Configuration -Configuration will be read from `config/solid_cache.yml`. You can change the location of the config file by setting the `SOLID_CACHE_CONFIG` env variable. +Configuration will be read from `config/cache.yml` or `config/solid_cache.yml`. You can change the location of the config file by setting the `SOLID_CACHE_CONFIG` env variable. The format of the file is: @@ -169,7 +169,7 @@ production: ``` ```yaml -# config/solid_cache.yml +# config/cache.yml production: databases: [cache_shard1, cache_shard2, cache_shard3] ``` @@ -179,7 +179,7 @@ production: To encrypt the cache values, you can add the encrypt property. ```yaml -# config/solid_cache.yml +# config/cache.yml production: encrypt: true ``` diff --git a/Rakefile b/Rakefile index fdc6c00..fe4befe 100644 --- a/Rakefile +++ b/Rakefile @@ -44,7 +44,7 @@ configs.each do |config| if config == :default sh("bin/rails test") else - sh("SOLID_CACHE_CONFIG=config/solid_cache_#{config}.yml bin/rails test") + sh("SOLID_CACHE_CONFIG=config/cache_#{config}.yml bin/rails test") end end end diff --git a/lib/generators/solid_cache/install/install_generator.rb b/lib/generators/solid_cache/install/install_generator.rb index b5baea7..607c709 100644 --- a/lib/generators/solid_cache/install/install_generator.rb +++ b/lib/generators/solid_cache/install/install_generator.rb @@ -4,7 +4,7 @@ class SolidCache::InstallGenerator < Rails::Generators::Base source_root File.expand_path("templates", __dir__) def copy_files - template "config/solid_cache.yml" + template "config/cache.yml" template "db/cache_schema.rb" end diff --git a/lib/generators/solid_cache/install/templates/config/solid_cache.yml.tt b/lib/generators/solid_cache/install/templates/config/cache.yml.tt similarity index 100% rename from lib/generators/solid_cache/install/templates/config/solid_cache.yml.tt rename to lib/generators/solid_cache/install/templates/config/cache.yml.tt diff --git a/lib/solid_cache/engine.rb b/lib/solid_cache/engine.rb index ad66741..da46138 100644 --- a/lib/solid_cache/engine.rb +++ b/lib/solid_cache/engine.rb @@ -10,13 +10,16 @@ class Engine < ::Rails::Engine config.solid_cache = ActiveSupport::OrderedOptions.new initializer "solid_cache.config", before: :initialize_cache do |app| - app.paths.add "config/solid_cache", with: ENV["SOLID_CACHE_CONFIG"] || "config/solid_cache.yml" + config_paths = %w[config/cache config/solid_cache] - options = {} - if (config_path = Pathname.new(app.config.paths["config/solid_cache"].first)).exist? - options = app.config_for(config_path).to_h.deep_symbolize_keys + config_paths.each do |path| + app.paths.add path, with: ENV["SOLID_CACHE_CONFIG"] || "#{path}.yml" end + config_pathname = config_paths.map { |path| Pathname.new(app.config.paths[path].first) }.find(&:exist?) + + options = config_pathname ? app.config_for(config_pathname).to_h.deep_symbolize_keys : {} + options[:connects_to] = config.solid_cache.connects_to if config.solid_cache.connects_to options[:size_estimate_samples] = config.solid_cache.size_estimate_samples if config.solid_cache.size_estimate_samples options[:encrypt] = config.solid_cache.encrypt if config.solid_cache.encrypt diff --git a/test/dummy/config/application.rb b/test/dummy/config/application.rb index bd64e05..94ef648 100644 --- a/test/dummy/config/application.rb +++ b/test/dummy/config/application.rb @@ -18,15 +18,11 @@ class Application < Rails::Application config.active_record.encryption.key_provider = ActiveRecord::Encryption::EnvelopeEncryptionKeyProvider.new - if ENV["SOLID_CACHE_CONFIG"] == "config/solid_cache_encrypted_custom.yml" + if ENV["SOLID_CACHE_CONFIG"] == "config/cache_encrypted_custom.yml" config.solid_cache.encryption_context_properties = { encryptor: ActiveRecord::Encryption::Encryptor.new, message_serializer: ActiveRecord::Encryption::MessageSerializer.new } end - - initializer :custom_solid_cache_yml, before: :solid_cache do |app| - app.paths.add "config/solid_cache", with: ENV["SOLID_CACHE_CONFIG_PATH"] - end end end diff --git a/test/dummy/config/solid_cache.yml b/test/dummy/config/cache.yml similarity index 100% rename from test/dummy/config/solid_cache.yml rename to test/dummy/config/cache.yml diff --git a/test/dummy/config/solid_cache_connects_to.yml b/test/dummy/config/cache_connects_to.yml similarity index 100% rename from test/dummy/config/solid_cache_connects_to.yml rename to test/dummy/config/cache_connects_to.yml diff --git a/test/dummy/config/solid_cache_database.yml b/test/dummy/config/cache_database.yml similarity index 100% rename from test/dummy/config/solid_cache_database.yml rename to test/dummy/config/cache_database.yml diff --git a/test/dummy/config/solid_cache_encrypted.yml b/test/dummy/config/cache_encrypted.yml similarity index 100% rename from test/dummy/config/solid_cache_encrypted.yml rename to test/dummy/config/cache_encrypted.yml diff --git a/test/dummy/config/solid_cache_encrypted_custom.yml b/test/dummy/config/cache_encrypted_custom.yml similarity index 100% rename from test/dummy/config/solid_cache_encrypted_custom.yml rename to test/dummy/config/cache_encrypted_custom.yml diff --git a/test/dummy/config/solid_cache_no_database.yml b/test/dummy/config/cache_no_database.yml similarity index 100% rename from test/dummy/config/solid_cache_no_database.yml rename to test/dummy/config/cache_no_database.yml diff --git a/test/dummy/config/solid_cache_shards.yml b/test/dummy/config/cache_shards.yml similarity index 100% rename from test/dummy/config/solid_cache_shards.yml rename to test/dummy/config/cache_shards.yml diff --git a/test/dummy/config/solid_cache_unprepared_statements.yml b/test/dummy/config/cache_unprepared_statements.yml similarity index 100% rename from test/dummy/config/solid_cache_unprepared_statements.yml rename to test/dummy/config/cache_unprepared_statements.yml diff --git a/test/lib/generators/solid_cache/solid_cache/install_generator_test.rb b/test/lib/generators/solid_cache/solid_cache/install_generator_test.rb index 9b01d9d..045e90f 100644 --- a/test/lib/generators/solid_cache/solid_cache/install_generator_test.rb +++ b/test/lib/generators/solid_cache/solid_cache/install_generator_test.rb @@ -18,7 +18,7 @@ class SolidCache::InstallGeneratorTest < Rails::Generators::TestCase test "generator updates environment config" do run_generator - assert_file "#{destination_root}/config/solid_cache.yml", expected_solid_cache_config + assert_file "#{destination_root}/config/cache.yml", expected_cache_config assert_file "#{destination_root}/db/cache_schema.rb" assert_file "#{destination_root}/config/environments/development.rb", /config.cache_store = :memory_store\n/ assert_file "#{destination_root}/config/environments/development.rb", /config.cache_store = :null_store\n/ @@ -27,7 +27,7 @@ class SolidCache::InstallGeneratorTest < Rails::Generators::TestCase end private - def expected_solid_cache_config + def expected_cache_config <<~YAML default: &default store_options: diff --git a/test/models/solid_cache/record_test.rb b/test/models/solid_cache/record_test.rb index 02b52b0..71e3658 100644 --- a/test/models/solid_cache/record_test.rb +++ b/test/models/solid_cache/record_test.rb @@ -4,23 +4,23 @@ module SolidCache class RecordTest < ActiveSupport::TestCase - SINGLE_DB_CONFIGS = [ "config/solid_cache_database.yml", "config/solid_cache_unprepared_statements.yml" ] + SINGLE_DB_CONFIGS = [ "config/cache_database.yml", "config/cache_unprepared_statements.yml" ] MULTI_DB_CONFIGS = [ - "config/solid_cache_connects_to.yml", - "config/solid_cache_encrypted.yml", - "config/solid_cache_encrypted_custom.yml", - "config/solid_cache_shards.yml", + "config/cache_connects_to.yml", + "config/cache_encrypted.yml", + "config/cache_encrypted_custom.yml", + "config/cache_shards.yml", nil ] test "each_shard" do shards = SolidCache::Record.each_shard.map { SolidCache::Record.current_shard } case ENV["SOLID_CACHE_CONFIG"] - when "config/solid_cache_no_database.yml" + when "config/cache_no_database.yml" assert_equal [ :default ], shards - when "config/solid_cache_database.yml" + when "config/cache_database.yml" assert_equal [ :primary ], shards - when "config/solid_cache_unprepared_statements.yml" + when "config/cache_unprepared_statements.yml" assert_equal [ :primary_unprepared_statements ], shards when *MULTI_DB_CONFIGS assert_equal [ :primary_shard_one, :primary_shard_two, :secondary_shard_one, :secondary_shard_two ], shards @@ -32,7 +32,7 @@ class RecordTest < ActiveSupport::TestCase test "each_shard uses the default role" do role = ActiveRecord::Base.connected_to(role: :reading) { SolidCache::Record.each_shard.map { SolidCache::Record.current_role } } case ENV["SOLID_CACHE_CONFIG"] - when "config/solid_cache_no_database.yml" + when "config/cache_no_database.yml" assert_equal [ :reading ], role when *SINGLE_DB_CONFIGS assert_equal [ :writing ], role diff --git a/test/test_helper.rb b/test/test_helper.rb index 3eba597..03a5389 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -82,11 +82,11 @@ def second_shard_key end def single_database? - [ "config/solid_cache_database.yml", "config/solid_cache_no_database.yml", "config/solid_cache_unprepared_statements.yml" ].include?(ENV["SOLID_CACHE_CONFIG"]) + [ "config/cache_database.yml", "config/cache_no_database.yml", "config/cache_unprepared_statements.yml" ].include?(ENV["SOLID_CACHE_CONFIG"]) end def default_database? - ENV["SOLID_CACHE_CONFIG"] == "config/solid_cache_no_database.yml" + ENV["SOLID_CACHE_CONFIG"] == "config/cache_no_database.yml" end def shard_keys(cache, shard) diff --git a/test/unit/encryption_test.rb b/test/unit/encryption_test.rb index fcddb1d..397ca37 100644 --- a/test/unit/encryption_test.rb +++ b/test/unit/encryption_test.rb @@ -9,7 +9,7 @@ class SolidCache::EncryptionTest < ActiveSupport::TestCase end test "not encrypted" do - skip if ENV["SOLID_CACHE_CONFIG"] =~ /config\/solid_cache_encrypted.*\.yml/ + skip if ENV["SOLID_CACHE_CONFIG"] =~ /config\/cache_encrypted.*\.yml/ @cache.write(@shard_key, "value") assert_not_nil first_value @@ -17,7 +17,7 @@ class SolidCache::EncryptionTest < ActiveSupport::TestCase end test "encrypted with defaults" do - skip unless ENV["SOLID_CACHE_CONFIG"] == "config/solid_cache_encrypted.yml" + skip unless ENV["SOLID_CACHE_CONFIG"] == "config/cache_encrypted.yml" @cache.write(@shard_key, "value") assert_not_nil first_value @@ -28,7 +28,7 @@ class SolidCache::EncryptionTest < ActiveSupport::TestCase end test "encrypted with custom settings" do - skip unless ENV["SOLID_CACHE_CONFIG"] == "config/solid_cache_encrypted_custom.yml" + skip unless ENV["SOLID_CACHE_CONFIG"] == "config/cache_encrypted_custom.yml" @cache.write(@shard_key, "value") assert_not_nil first_value diff --git a/test/unit/stats_test.rb b/test/unit/stats_test.rb index dcf3856..f76766f 100644 --- a/test/unit/stats_test.rb +++ b/test/unit/stats_test.rb @@ -11,7 +11,7 @@ class SolidCache::StatsTest < ActiveSupport::TestCase end def test_stats_with_entries_no_shards - skip unless ENV["SOLID_CACHE_CONFIG"] == "config/solid_cache_no_database.yml" + skip unless ENV["SOLID_CACHE_CONFIG"] == "config/cache_no_database.yml" @cache = lookup_store(expiry_batch_size: 2, max_age: 2.weeks.to_i, max_entries: 1000)