hephaestus 0.7.7.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/app/controllers/concerns/hephaestus/validates_from_yetto.rb +0 -4
- data/app/controllers/hephaestus/staff_controller.rb +1 -1
- data/config/database.yml +18 -14
- data/config/environments/development.rb +0 -4
- data/config/environments/production.rb +0 -4
- data/config/environments/staging.rb +0 -4
- data/config/initializers/application.rb +8 -0
- data/config/initializers/environment.rb +5 -28
- data/config/initializers/slack_webhook_logger.rb +1 -1
- data/lib/hephaestus/engine.rb +31 -0
- data/lib/hephaestus/test_helper.rb +1 -1
- data/lib/hephaestus/version.rb +1 -1
- metadata +17 -19
- data/config/initializers/litestream.rb +0 -36
- data/config/litestream.yml +0 -12
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 77092b98152339bfe62743fae70e95fcf0c9e62a0e4ff96ba162223081d077aa
         | 
| 4 | 
            +
              data.tar.gz: fb0f88e3552a5304cea71f6c0a2741a7649d58aea5e1c38f5c0c51ed3c863604
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c44b03d8795d54fe89a4439186fba9317ea77c41982dd667d1156971f13ecc8ac89b9a67f1c6bb23b7cf990aa20a329d3ddcd39b8a7c2e58974e65104642627d
         | 
| 7 | 
            +
              data.tar.gz: ddd46922e343c58590fad3c7a048ae8059a1bbd3b01a8e3af8947f4411862d1a1020886e0892c400561a164c54039411bbf8f733fb8867d995e59d08db010cff
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,3 +1,9 @@ | |
| 1 | 
            +
            # [v0.8.0] - 25-11-2024
         | 
| 2 | 
            +
            ## What's Changed
         | 
| 3 | 
            +
            * End the promise of litefs by @gjtorikian in https://github.com/yettoapp/hephaestus/pull/63
         | 
| 4 | 
            +
             | 
| 5 | 
            +
             | 
| 6 | 
            +
            **Full Changelog**: https://github.com/yettoapp/hephaestus/compare/v0.7.7.2...v0.8.0
         | 
| 1 7 | 
             
            # [v0.7.7.2] - 21-11-2024
         | 
| 2 8 | 
             
            **Full Changelog**: https://github.com/yettoapp/hephaestus/compare/v0.7.7...v0.7.7.2
         | 
| 3 9 | 
             
            # [v0.7.7] - 21-11-2024
         | 
    
        data/config/database.yml
    CHANGED
    
    | @@ -4,17 +4,17 @@ | |
| 4 4 | 
             
            #   Ensure the SQLite 3 gem is defined in your Gemfile
         | 
| 5 5 | 
             
            #   gem "sqlite3"
         | 
| 6 6 | 
             
            #
         | 
| 7 | 
            -
             | 
| 7 | 
            +
            default_local: &default_local
         | 
| 8 8 | 
             
              adapter: sqlite3
         | 
| 9 9 | 
             
              pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
         | 
| 10 10 | 
             
              timeout: 5000
         | 
| 11 11 |  | 
| 12 12 | 
             
            development:
         | 
| 13 13 | 
             
              primary:
         | 
| 14 | 
            -
                <<: * | 
| 15 | 
            -
                database: storage/development.sqlite3
         | 
| 14 | 
            +
                <<: *default_local
         | 
| 15 | 
            +
                database: "storage/development.sqlite3"
         | 
| 16 16 | 
             
              queue:
         | 
| 17 | 
            -
                <<: * | 
| 17 | 
            +
                <<: *default_local
         | 
| 18 18 | 
             
                database: storage/development_queue.sqlite3
         | 
| 19 19 | 
             
                migrations_paths: db/queue_migrate
         | 
| 20 20 |  | 
| @@ -24,14 +24,18 @@ development: | |
| 24 24 | 
             
            # Do not set this db to the same as development or production.
         | 
| 25 25 | 
             
            test:
         | 
| 26 26 | 
             
              primary:
         | 
| 27 | 
            -
                <<: * | 
| 27 | 
            +
                <<: *default_local
         | 
| 28 28 | 
             
                database: storage/test.sqlite3
         | 
| 29 29 | 
             
              queue:
         | 
| 30 | 
            -
                <<: * | 
| 30 | 
            +
                <<: *default_local
         | 
| 31 31 | 
             
                database: storage/test_queue.sqlite3
         | 
| 32 32 | 
             
                migrations_paths: db/queue_migrate
         | 
| 33 33 |  | 
| 34 34 |  | 
| 35 | 
            +
            default_productionish: &default_productionish
         | 
| 36 | 
            +
              adapter: postgresql
         | 
| 37 | 
            +
              pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
         | 
| 38 | 
            +
              timeout: 5000
         | 
| 35 39 |  | 
| 36 40 | 
             
            # SQLite3 write its data on the local filesystem, as such it requires
         | 
| 37 41 | 
             
            # persistent disks. If you are deploying to a managed service, you should
         | 
| @@ -41,18 +45,18 @@ test: | |
| 41 45 | 
             
            # ensure the database is located in a persisted volume.
         | 
| 42 46 | 
             
            staging:
         | 
| 43 47 | 
             
              primary:
         | 
| 44 | 
            -
                <<: * | 
| 45 | 
            -
                 | 
| 48 | 
            +
                <<: *default_productionish
         | 
| 49 | 
            +
                url: <%= ENV["DATABASE_URL"] %>
         | 
| 46 50 | 
             
              queue:
         | 
| 47 | 
            -
                <<: * | 
| 48 | 
            -
                 | 
| 51 | 
            +
                <<: *default_productionish
         | 
| 52 | 
            +
                url: <%= ENV["DATABASE_URL"] %>
         | 
| 49 53 | 
             
                migrations_paths: db/queue_migrate
         | 
| 50 54 |  | 
| 51 55 | 
             
            production:
         | 
| 52 56 | 
             
              primary:
         | 
| 53 | 
            -
                <<: * | 
| 54 | 
            -
                 | 
| 57 | 
            +
                <<: *default_productionish
         | 
| 58 | 
            +
                url: <%= ENV["DATABASE_URL"] %>
         | 
| 55 59 | 
             
              queue:
         | 
| 56 | 
            -
                <<: * | 
| 57 | 
            -
                 | 
| 60 | 
            +
                <<: *default_productionish
         | 
| 61 | 
            +
                url: <%= ENV["DATABASE_URL"] %>
         | 
| 58 62 | 
             
                migrations_paths: db/queue_migrate
         | 
| @@ -66,10 +66,6 @@ Rails.application.configure do | |
| 66 66 | 
             
              # Raise error when a before_action's only/except options reference missing actions.
         | 
| 67 67 | 
             
              config.action_controller.raise_on_missing_callback_actions = true
         | 
| 68 68 |  | 
| 69 | 
            -
              config.active_job.queue_adapter = :solid_queue
         | 
| 70 | 
            -
              config.solid_queue.silence_polling = true
         | 
| 71 | 
            -
              config.solid_queue.connects_to = { database: { writing: :queue } }
         | 
| 72 | 
            -
             | 
| 73 69 | 
             
              # Apply autocorrection by RuboCop to files generated by `bin/rails generate`.
         | 
| 74 70 | 
             
              # config.generators.apply_rubocop_autocorrect_after_generate!
         | 
| 75 71 |  | 
| @@ -59,10 +59,6 @@ Rails.application.configure do | |
| 59 59 | 
             
              # Use a different cache store in production.
         | 
| 60 60 | 
             
              # config.cache_store = :mem_cache_store
         | 
| 61 61 |  | 
| 62 | 
            -
              # Use a real queuing backend for Active Job (and separate queues per environment).
         | 
| 63 | 
            -
              config.active_job.queue_adapter = :solid_queue
         | 
| 64 | 
            -
              config.solid_queue.connects_to = { database: { writing: :queue } }
         | 
| 65 | 
            -
             | 
| 66 62 | 
             
              # config.active_job.queue_name_prefix = "plug_email_production"
         | 
| 67 63 |  | 
| 68 64 | 
             
              if defined?(ActionMailer)
         | 
| @@ -59,10 +59,6 @@ Rails.application.configure do | |
| 59 59 | 
             
              # Use a different cache store in production.
         | 
| 60 60 | 
             
              # config.cache_store = :mem_cache_store
         | 
| 61 61 |  | 
| 62 | 
            -
              # Use a real queuing backend for Active Job (and separate queues per environment).
         | 
| 63 | 
            -
              config.active_job.queue_adapter = :solid_queue
         | 
| 64 | 
            -
              config.solid_queue.connects_to = { database: { writing: :queue } }
         | 
| 65 | 
            -
             | 
| 66 62 | 
             
              if defined?(ActionMailer)
         | 
| 67 63 | 
             
                # Disable caching for Action Mailer templates even if Action Controller
         | 
| 68 64 | 
             
                # caching is enabled.
         | 
| @@ -11,4 +11,12 @@ Rails.application.configure do | |
| 11 11 |  | 
| 12 12 | 
             
              # Remove this in rails 8.1 as it will be the default
         | 
| 13 13 | 
             
              config.active_support.to_time_preserves_timezone = :zone
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              if Rails.env.test?
         | 
| 16 | 
            +
                config.active_job.queue_adapter = :test
         | 
| 17 | 
            +
              else
         | 
| 18 | 
            +
                config.active_job.queue_adapter = :solid_queue
         | 
| 19 | 
            +
                config.solid_queue.silence_polling = !Rails.env.local?
         | 
| 20 | 
            +
                config.solid_queue.connects_to = { database: { writing: :queue } }
         | 
| 21 | 
            +
              end
         | 
| 14 22 | 
             
            end
         | 
| @@ -3,14 +3,6 @@ | |
| 3 3 |  | 
| 4 4 | 
             
            OP_VAULT_SECRETS = {}
         | 
| 5 5 |  | 
| 6 | 
            -
            def fetch_infra_secret(label:, default:)
         | 
| 7 | 
            -
              if productionish?
         | 
| 8 | 
            -
                op_read("op://Infra/Global Secrets/#{label}")
         | 
| 9 | 
            -
              else
         | 
| 10 | 
            -
                ENV.fetch(label, default.is_a?(Pathname) ? default.read : default)
         | 
| 11 | 
            -
              end
         | 
| 12 | 
            -
            end
         | 
| 13 | 
            -
             | 
| 14 6 | 
             
            def fetch_vault_secret(label:, default:)
         | 
| 15 7 | 
             
              if productionish?
         | 
| 16 8 | 
             
                OP_VAULT_SECRETS.delete(label) || raise("Secret `#{label}` not found in 1Password")
         | 
| @@ -19,29 +11,14 @@ def fetch_vault_secret(label:, default:) | |
| 19 11 | 
             
              end
         | 
| 20 12 | 
             
            end
         | 
| 21 13 |  | 
| 22 | 
            -
            def op_read(label)
         | 
| 23 | 
            -
              %x(#{include_sudo?}op read "#{label}").chomp.tap do
         | 
| 24 | 
            -
                raise "Failed to fetch `#{label}` from 1Password" unless $CHILD_STATUS.success?
         | 
| 25 | 
            -
              end
         | 
| 26 | 
            -
            end
         | 
| 27 | 
            -
             | 
| 28 14 | 
             
            def op_load_vault_into_env(vault:, tag:)
         | 
| 29 15 | 
             
              %x(#{include_sudo?}op item list --vault #{vault} --tags #{tag} --format json | #{include_sudo?}op item get - --reveal --format=json).tap do
         | 
| 30 16 | 
             
                raise "Failed to fetch value `#{vault}` for `#{tag}` from 1Password" unless $CHILD_STATUS.success?
         | 
| 31 17 | 
             
              end
         | 
| 32 18 | 
             
            end
         | 
| 33 19 |  | 
| 34 | 
            -
            def  | 
| 35 | 
            -
               | 
| 36 | 
            -
            end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
            def cli_installed?
         | 
| 39 | 
            -
              %x(#{include_sudo?}op --version 2> /dev/null)
         | 
| 40 | 
            -
              $CHILD_STATUS.success?
         | 
| 41 | 
            -
            end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
            def include_sudo?
         | 
| 44 | 
            -
              productionish? ? "sudo -E " : ""
         | 
| 20 | 
            +
            def load_vault_secret(field)
         | 
| 21 | 
            +
              OP_VAULT_SECRETS[field["label"]] = field["value"].gsub("\\n", "\n")
         | 
| 45 22 | 
             
            end
         | 
| 46 23 |  | 
| 47 24 | 
             
            def productionish?
         | 
| @@ -101,13 +78,12 @@ module Hephaestus | |
| 101 78 | 
             
              # Every plug has secrets; to reduce the amount of API calls to 1Password,
         | 
| 102 79 | 
             
              # we can grab one document that contains all the secrets we need
         | 
| 103 80 | 
             
              if productionish?
         | 
| 104 | 
            -
                check_dependencies!
         | 
| 105 81 | 
             
                res = JSON.parse(op_load_vault_into_env(vault: "Plug-#{plug_name}", tag: ENV["RAILS_ENV"]))
         | 
| 106 82 | 
             
                ["Common", "Unique", "Yetto"].each do |section_label|
         | 
| 107 83 | 
             
                  res["fields"].select { |f| f["section"] && f["section"]["label"] }.each do |field|
         | 
| 108 84 | 
             
                    next unless field["section"]["label"] == section_label
         | 
| 109 85 |  | 
| 110 | 
            -
                     | 
| 86 | 
            +
                    load_vault_secret(field)
         | 
| 111 87 | 
             
                  end
         | 
| 112 88 | 
             
                end
         | 
| 113 89 | 
             
              end
         | 
| @@ -122,7 +98,8 @@ module Hephaestus | |
| 122 98 |  | 
| 123 99 | 
             
              YETTO_SIGNING_SECRET = fetch_vault_secret(
         | 
| 124 100 | 
             
                label: "YETTO_SIGNING_SECRET",
         | 
| 125 | 
            -
                 | 
| 101 | 
            +
                # this is a fake 32-bit secret
         | 
| 102 | 
            +
                default: "caae20f6dcb2b745003abe043f2d9b56",
         | 
| 126 103 | 
             
              )
         | 
| 127 104 |  | 
| 128 105 | 
             
              YETTO_PLUG_ID = fetch_vault_secret(
         | 
| @@ -7,7 +7,7 @@ SlackWebhookLogger.setup do |config| | |
| 7 7 | 
             
              # Webhook URL
         | 
| 8 8 | 
             
              #
         | 
| 9 9 | 
             
              # The URL where messages will be sent.
         | 
| 10 | 
            -
              config.webhook_url = fetch_infra_secret(
         | 
| 10 | 
            +
              config.webhook_url = Hephaestus::Engine.fetch_infra_secret(
         | 
| 11 11 | 
             
                label: "SLACK_#{Rails.env.upcase}_LOG_URL",
         | 
| 12 12 | 
             
                default: "https://slack.com/the_log_room",
         | 
| 13 13 | 
             
              )
         | 
    
        data/lib/hephaestus/engine.rb
    CHANGED
    
    | @@ -60,6 +60,37 @@ module Hephaestus | |
| 60 60 | 
             
                      match("/*unmatched_route", to: "application#not_found", via: :all)
         | 
| 61 61 | 
             
                    end
         | 
| 62 62 | 
             
                  end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                  # we need to check if the 1Password CLI is installed and load it ASAP,
         | 
| 65 | 
            +
                  # because it contains all the secrets
         | 
| 66 | 
            +
                  def fetch_infra_secret(label:, default:)
         | 
| 67 | 
            +
                    if productionish?
         | 
| 68 | 
            +
                      op_read("op://Infra/Global Secrets/#{label}")
         | 
| 69 | 
            +
                    else
         | 
| 70 | 
            +
                      ENV.fetch(label, default.is_a?(Pathname) ? default.read : default)
         | 
| 71 | 
            +
                    end
         | 
| 72 | 
            +
                  end
         | 
| 63 73 | 
             
                end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                def op_read(label)
         | 
| 76 | 
            +
                  %x(#{include_sudo?}op read "#{label}").chomp.tap do
         | 
| 77 | 
            +
                    raise "Failed to fetch `#{label}` from 1Password" unless $CHILD_STATUS.success?
         | 
| 78 | 
            +
                  end
         | 
| 79 | 
            +
                end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                def check_dependencies!
         | 
| 82 | 
            +
                  raise "1Password CLI is not installed" unless cli_installed?
         | 
| 83 | 
            +
                end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                def cli_installed?
         | 
| 86 | 
            +
                  %x(#{include_sudo?}op --version 2> /dev/null)
         | 
| 87 | 
            +
                  $CHILD_STATUS.success?
         | 
| 88 | 
            +
                end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                def include_sudo?
         | 
| 91 | 
            +
                  productionish? ? "sudo -E " : ""
         | 
| 92 | 
            +
                end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                check_dependencies! unless Rails.env.local?
         | 
| 64 95 | 
             
              end
         | 
| 65 96 | 
             
            end
         | 
    
        data/lib/hephaestus/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: hephaestus
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.8.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Garen Torikian
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2024-11- | 
| 11 | 
            +
            date: 2024-11-25 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bootsnap
         | 
| @@ -114,21 +114,6 @@ dependencies: | |
| 114 114 | 
             
                  - !ruby/object:Gem::Version
         | 
| 115 115 | 
             
                    version: '2.8'
         | 
| 116 116 | 
             
              force_ruby_platform: false
         | 
| 117 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 118 | 
            -
              name: litestream
         | 
| 119 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 120 | 
            -
                requirements:
         | 
| 121 | 
            -
                - - "~>"
         | 
| 122 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 123 | 
            -
                    version: '0.12'
         | 
| 124 | 
            -
              type: :runtime
         | 
| 125 | 
            -
              prerelease: false
         | 
| 126 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 127 | 
            -
                requirements:
         | 
| 128 | 
            -
                - - "~>"
         | 
| 129 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 130 | 
            -
                    version: '0.12'
         | 
| 131 | 
            -
              force_ruby_platform: false
         | 
| 132 117 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 133 118 | 
             
              name: lograge
         | 
| 134 119 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -189,6 +174,21 @@ dependencies: | |
| 189 174 | 
             
                  - !ruby/object:Gem::Version
         | 
| 190 175 | 
             
                    version: '3.0'
         | 
| 191 176 | 
             
              force_ruby_platform: false
         | 
| 177 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 178 | 
            +
              name: pg
         | 
| 179 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 180 | 
            +
                requirements:
         | 
| 181 | 
            +
                - - "~>"
         | 
| 182 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 183 | 
            +
                    version: '1.5'
         | 
| 184 | 
            +
              type: :runtime
         | 
| 185 | 
            +
              prerelease: false
         | 
| 186 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 187 | 
            +
                requirements:
         | 
| 188 | 
            +
                - - "~>"
         | 
| 189 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 190 | 
            +
                    version: '1.5'
         | 
| 191 | 
            +
              force_ruby_platform: false
         | 
| 192 192 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 193 193 | 
             
              name: puma
         | 
| 194 194 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -438,11 +438,9 @@ files: | |
| 438 438 | 
             
            - config/initializers/environment.rb
         | 
| 439 439 | 
             
            - config/initializers/filter_parameter_logging.rb
         | 
| 440 440 | 
             
            - config/initializers/inflections.rb
         | 
| 441 | 
            -
            - config/initializers/litestream.rb
         | 
| 442 441 | 
             
            - config/initializers/lograge.rb
         | 
| 443 442 | 
             
            - config/initializers/opentelemetry.rb
         | 
| 444 443 | 
             
            - config/initializers/slack_webhook_logger.rb
         | 
| 445 | 
            -
            - config/litestream.yml
         | 
| 446 444 | 
             
            - config/puma.rb
         | 
| 447 445 | 
             
            - config/queue.yml
         | 
| 448 446 | 
             
            - config/recurring.yml
         | 
| @@ -1,36 +0,0 @@ | |
| 1 | 
            -
            # typed: false
         | 
| 2 | 
            -
            # frozen_string_literal: true
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            # Use this hook to configure the litestream-ruby gem.
         | 
| 5 | 
            -
            # All configuration options will be available as environment variables, e.g.
         | 
| 6 | 
            -
            # config.replica_bucket becomes LITESTREAM_REPLICA_BUCKET
         | 
| 7 | 
            -
            # This allows you to configure Litestream using Rails encrypted credentials,
         | 
| 8 | 
            -
            # or some other mechanism where the values are only avaialble at runtime.
         | 
| 9 | 
            -
             | 
| 10 | 
            -
            Rails.application.configure do
         | 
| 11 | 
            -
              # An example of using Rails encrypted credentials to configure Litestream.
         | 
| 12 | 
            -
              # litestream_credentials = Rails.application.credentials.litestream
         | 
| 13 | 
            -
             | 
| 14 | 
            -
              # Replica-specific bucket location.
         | 
| 15 | 
            -
              # This will be your bucket's URL without the `https://` prefix.
         | 
| 16 | 
            -
              # For example, if you used DigitalOcean Spaces, your bucket URL could look like:
         | 
| 17 | 
            -
              #   https://myapp.fra1.digitaloceanspaces.com
         | 
| 18 | 
            -
              # And so you should set your `replica_bucket` to:
         | 
| 19 | 
            -
              #   myapp.fra1.digitaloceanspaces.com
         | 
| 20 | 
            -
              # Litestream supports Azure Blog Storage, Backblaze B2, DigitalOcean Spaces,
         | 
| 21 | 
            -
              # Scaleway Object Storage, Google Cloud Storage, Linode Object Storage, and
         | 
| 22 | 
            -
              # any SFTP server.
         | 
| 23 | 
            -
              # In this example, we are using Rails encrypted credentials to store the URL to
         | 
| 24 | 
            -
              # our storage provider bucket.
         | 
| 25 | 
            -
              # config.litestream.replica_bucket = litestream_credentials&.replica_bucket
         | 
| 26 | 
            -
             | 
| 27 | 
            -
              # Replica-specific authentication key.
         | 
| 28 | 
            -
              # Litestream needs authentication credentials to access your storage provider bucket.
         | 
| 29 | 
            -
              # In this example, we are using Rails encrypted credentials to store the access key ID.
         | 
| 30 | 
            -
              # config.litestream.replica_key_id = litestream_credentials&.replica_key_id
         | 
| 31 | 
            -
             | 
| 32 | 
            -
              # Replica-specific secret key.
         | 
| 33 | 
            -
              # Litestream needs authentication credentials to access your storage provider bucket.
         | 
| 34 | 
            -
              # In this example, we are using Rails encrypted credentials to store the secret access key.
         | 
| 35 | 
            -
              # config.litestream.replica_access_key = litestream_credentials&.replica_access_key
         | 
| 36 | 
            -
            end
         | 
    
        data/config/litestream.yml
    DELETED
    
    | @@ -1,12 +0,0 @@ | |
| 1 | 
            -
            # This is the actual configuration file for litestream.
         | 
| 2 | 
            -
            #
         | 
| 3 | 
            -
            # You can either use the generated `config/initializers/litestream.rb`
         | 
| 4 | 
            -
            # file to configure the litestream-ruby gem, which will populate these
         | 
| 5 | 
            -
            # ENV variables when using the `rails litestream:replicate` command.
         | 
| 6 | 
            -
            #
         | 
| 7 | 
            -
            # Or, if you prefer, manually manage ENV variables and this configuration file.
         | 
| 8 | 
            -
            # In that case, simply ensure that the ENV variables are set before running the
         | 
| 9 | 
            -
            # `replicate` command.
         | 
| 10 | 
            -
            #
         | 
| 11 | 
            -
            # For more details, see: https://litestream.io/reference/config/
         | 
| 12 | 
            -
            dbs:
         |