online_migrations 0.13.0 → 0.14.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 +14 -0
- data/docs/configuring.md +11 -0
- data/lib/generators/online_migrations/templates/initializer.rb.tt +4 -0
- data/lib/online_migrations/background_migrations/migration.rb +1 -4
- data/lib/online_migrations/background_migrations/migration_helpers.rb +2 -2
- data/lib/online_migrations/batch_iterator.rb +1 -1
- data/lib/online_migrations/config.rb +11 -0
- data/lib/online_migrations/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 296a1517b032cbd6d5fa3948f60f1a4f20c4142c8f4c7676c43998f9e941925d
         | 
| 4 | 
            +
              data.tar.gz: f61a7c6728a6ea1e834be61187b61e3ddf004f4314003752ec3ccf9a5b79afd9
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: fd04da6b57f9862726ee45e6ed13b1032632099a089e26e691717b2e93009269b7f8a8cf3c828501ef97a86d3d13731d4cadb77d0b48f0cf25fea172502780c1
         | 
| 7 | 
            +
              data.tar.gz: '089a7f40afc28b9671669764ee98c760e4ee8649aab67a4d814b22ca8f5c52cf76afc8a5c9f95244d8be7b879d2b714fa38f07fff3c741bcc91e450077c96801'
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,19 @@ | |
| 1 1 | 
             
            ## master (unreleased)
         | 
| 2 2 |  | 
| 3 | 
            +
            ## 0.14.0 (2024-02-01)
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            - Add ability to configure whether background migrations should be run inline
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                The previous behavior of running inline in development and test environments is preserved, unless overriden.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                ```ruby
         | 
| 10 | 
            +
                config.run_background_migrations_inline = -> { Rails.env.local? }
         | 
| 11 | 
            +
                ```
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            ## 0.13.1 (2024-01-23)
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            - Fix calculation of batch ranges for background migration created with explicit ranges
         | 
| 16 | 
            +
             | 
| 3 17 | 
             
            ## 0.13.0 (2024-01-22)
         | 
| 4 18 |  | 
| 5 19 | 
             
            - Add ability to configure the path where generated background migrations will be placed
         | 
    
        data/docs/configuring.md
    CHANGED
    
    | @@ -214,6 +214,17 @@ Add to an initializer file: | |
| 214 214 | 
             
            config.auto_analyze = true
         | 
| 215 215 | 
             
            ```
         | 
| 216 216 |  | 
| 217 | 
            +
            ### Running background migrations inline
         | 
| 218 | 
            +
             | 
| 219 | 
            +
            `config.run_background_migrations_inline` can be configured with a proc to decide whether background migrations should be run inline. For convenience defaults to true for development and test environments.
         | 
| 220 | 
            +
             | 
| 221 | 
            +
            ```ruby
         | 
| 222 | 
            +
            # config/initializers/online_migrations.rb
         | 
| 223 | 
            +
            config.run_background_migrations_inline = -> { Rails.env.local? }
         | 
| 224 | 
            +
            ```
         | 
| 225 | 
            +
             | 
| 226 | 
            +
            Set to `nil` to avoid running background migrations inline.
         | 
| 227 | 
            +
             | 
| 217 228 | 
             
            ## Schema Sanity
         | 
| 218 229 |  | 
| 219 230 | 
             
            Columns can flip order in `db/schema.rb` when you have multiple developers. One way to prevent this is to [alphabetize them](https://www.pgrs.net/2008/03/12/alphabetize-schema-rb-columns/).
         | 
| @@ -77,6 +77,10 @@ OnlineMigrations.configure do |config| | |
| 77 77 | 
             
              #   end
         | 
| 78 78 | 
             
              # end
         | 
| 79 79 |  | 
| 80 | 
            +
              # Decide whether background migrations should be run inline.
         | 
| 81 | 
            +
              # Convenient for development and test environments.
         | 
| 82 | 
            +
              config.run_background_migrations_inline = -> { Rails.env.local? }
         | 
| 83 | 
            +
             | 
| 80 84 | 
             
              # ==> Background migrations configuration
         | 
| 81 85 |  | 
| 82 86 | 
             
              # The path where generated background migrations will be placed.
         | 
| @@ -197,10 +197,7 @@ module OnlineMigrations | |
| 197 197 |  | 
| 198 198 | 
             
                    on_shard do
         | 
| 199 199 | 
             
                      # rubocop:disable Lint/UnreachableLoop
         | 
| 200 | 
            -
                      iterator.each_batch(of: batch_size, column: batch_column_name, start: next_min_value) do | | 
| 201 | 
            -
                        if max_value.nil?
         | 
| 202 | 
            -
                          max_value = relation.pick(relation.arel_table[batch_column_name].maximum)
         | 
| 203 | 
            -
                        end
         | 
| 200 | 
            +
                      iterator.each_batch(of: batch_size, column: batch_column_name, start: next_min_value, finish: max_value) do |_relation, min_value, max_value|
         | 
| 204 201 | 
             
                        batch_range = [min_value, max_value]
         | 
| 205 202 |  | 
| 206 203 | 
             
                        break
         | 
| @@ -372,8 +372,8 @@ module OnlineMigrations | |
| 372 372 | 
             
                  def enqueue_background_migration(migration_name, *arguments, **options)
         | 
| 373 373 | 
             
                    migration = create_background_migration(migration_name, *arguments, **options)
         | 
| 374 374 |  | 
| 375 | 
            -
                     | 
| 376 | 
            -
                    if  | 
| 375 | 
            +
                    run_inline = OnlineMigrations.config.run_background_migrations_inline
         | 
| 376 | 
            +
                    if run_inline && run_inline.call
         | 
| 377 377 | 
             
                      runner = MigrationRunner.new(migration)
         | 
| 378 378 | 
             
                      runner.run_all_migration_jobs
         | 
| 379 379 | 
             
                    end
         | 
| @@ -69,7 +69,7 @@ module OnlineMigrations | |
| 69 69 | 
             
                    # efficient UPDATE queries, hence we get rid of it.
         | 
| 70 70 | 
             
                    batch_relation = batch_relation.except(:order)
         | 
| 71 71 |  | 
| 72 | 
            -
                    last_id = (last_row && last_row[column]) ||  | 
| 72 | 
            +
                    last_id = (last_row && last_row[column]) || finish
         | 
| 73 73 |  | 
| 74 74 | 
             
                    # Retaining the results in the query cache would undermine the point of batching.
         | 
| 75 75 | 
             
                    batch_relation.uncached { yield batch_relation, start_id, last_id }
         | 
| @@ -171,6 +171,16 @@ module OnlineMigrations | |
| 171 171 | 
             
                #
         | 
| 172 172 | 
             
                attr_accessor :verbose_sql_logs
         | 
| 173 173 |  | 
| 174 | 
            +
                # The proc which decides whether background migrations should be run inline.
         | 
| 175 | 
            +
                # For convenience defaults to true for development and test environments.
         | 
| 176 | 
            +
                #
         | 
| 177 | 
            +
                # @example
         | 
| 178 | 
            +
                #   OnlineMigrations.config.run_background_migrations_inline = -> { Rails.env.local? }
         | 
| 179 | 
            +
                #
         | 
| 180 | 
            +
                # @return [Proc]
         | 
| 181 | 
            +
                #
         | 
| 182 | 
            +
                attr_accessor :run_background_migrations_inline
         | 
| 183 | 
            +
             | 
| 174 184 | 
             
                # Configuration object to configure background migrations
         | 
| 175 185 | 
             
                #
         | 
| 176 186 | 
             
                # @return [BackgroundMigrationsConfig]
         | 
| @@ -202,6 +212,7 @@ module OnlineMigrations | |
| 202 212 | 
             
                  @alphabetize_schema = false
         | 
| 203 213 | 
             
                  @enabled_checks = @error_messages.keys.index_with({})
         | 
| 204 214 | 
             
                  @verbose_sql_logs = defined?(Rails.env) && (Rails.env.production? || Rails.env.staging?)
         | 
| 215 | 
            +
                  @run_background_migrations_inline = -> { Utils.developer_env? }
         | 
| 205 216 | 
             
                end
         | 
| 206 217 |  | 
| 207 218 | 
             
                def lock_retrier=(value)
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: online_migrations
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.14.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - fatkodima
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2024-01 | 
| 11 | 
            +
            date: 2024-02-01 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activerecord
         |