multiverse 0.2.1 → 0.2.2
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 +4 -0
- data/LICENSE.txt +1 -1
- data/README.md +99 -2
- data/lib/multiverse/railtie.rb +2 -1
- data/lib/multiverse/version.rb +1 -1
- metadata +8 -14
- data/.gitignore +0 -9
- data/.travis.yml +0 -20
- data/Gemfile +0 -4
- data/Rakefile +0 -10
- data/multiverse.gemspec +0 -30
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 795bc91f0bfa9e597a580449331ac77509fdba477a0313b1c83e06b7f45d6ab0
         | 
| 4 | 
            +
              data.tar.gz: 9d21f5ab4e0e6bcf1095e2d23d0f24cfd8e12ec8b7c4a2a2f0af04e5172f75b5
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 90d731497ca6a7514321ee25ec50690b61132e514f1b7e26c38b7df6c4fc082a74ab9af662717e5c6e729ce11d19c74349856b92ffed0ab947f382ffea1a91e8
         | 
| 7 | 
            +
              data.tar.gz: bc0bc7446fe753dcb4c64fabf3c557bab8aac44899283c713d33d17020e709c6eb87b2ef7606096821b73811d30eb0c85ca649eb36e1b51aaf4ea236048d751e
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/LICENSE.txt
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -2,7 +2,9 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            :fire: Multiple databases for Rails
         | 
| 4 4 |  | 
| 5 | 
            -
             | 
| 5 | 
            +
            **ActiveRecord supports multiple databases, but Rails < 6 doesn’t provide a way to manage them.** Multiverse changes this.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Plus, it’s easy to [upgrade to Rails 6](#upgrading-to-rails-6) when you get there.
         | 
| 6 8 |  | 
| 7 9 | 
             
            Works with Rails 4.2+
         | 
| 8 10 |  | 
| @@ -71,6 +73,8 @@ end | |
| 71 73 |  | 
| 72 74 | 
             
            ## Web Servers
         | 
| 73 75 |  | 
| 76 | 
            +
            *Only necessary in Rails < 5.2*
         | 
| 77 | 
            +
             | 
| 74 78 | 
             
            For web servers that fork, be sure to reconnect after forking (just like you do with `ActiveRecord::Base`)
         | 
| 75 79 |  | 
| 76 80 | 
             
            ### Puma
         | 
| @@ -99,7 +103,17 @@ CatalogRecord.establish_connection :"catalog_#{Rails.env}" | |
| 99 103 |  | 
| 100 104 | 
             
            ### Fixtures
         | 
| 101 105 |  | 
| 102 | 
            -
            [Rails fixtures]( | 
| 106 | 
            +
            [Rails fixtures](https://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures) work automatically.
         | 
| 107 | 
            +
             | 
| 108 | 
            +
            **Note:** Referential integrity is not disabled on additional databases when fixtures are loaded, so you may run into issues if you use foreign keys. Also, you may run into errors with fixtures if the additional databases aren’t the same type as the primary.
         | 
| 109 | 
            +
             | 
| 110 | 
            +
            ### RSpec
         | 
| 111 | 
            +
             | 
| 112 | 
            +
            After running migrations for additional databases, run:
         | 
| 113 | 
            +
             | 
| 114 | 
            +
            ```sh
         | 
| 115 | 
            +
            DB=catalog rails db:test:prepare
         | 
| 116 | 
            +
            ```
         | 
| 103 117 |  | 
| 104 118 | 
             
            ### Database Cleaner
         | 
| 105 119 |  | 
| @@ -115,6 +129,89 @@ end | |
| 115 129 |  | 
| 116 130 | 
             
            [Read more here](https://github.com/DatabaseCleaner/database_cleaner#how-to-use-with-multiple-orms)
         | 
| 117 131 |  | 
| 132 | 
            +
            ## Limitations
         | 
| 133 | 
            +
             | 
| 134 | 
            +
            There are a few features that aren’t supported on additional databases.
         | 
| 135 | 
            +
             | 
| 136 | 
            +
            - Pending migration check
         | 
| 137 | 
            +
            - `schema_cache.yml`
         | 
| 138 | 
            +
             | 
| 139 | 
            +
            Also note that `ActiveRecord::Migration.maintain_test_schema!` doesn’t affect additional databases.
         | 
| 140 | 
            +
             | 
| 141 | 
            +
            ## Upgrading to Rails 6
         | 
| 142 | 
            +
             | 
| 143 | 
            +
            Rails 6 provides a way to manage multiple databases :tada:
         | 
| 144 | 
            +
             | 
| 145 | 
            +
            To upgrade from Multiverse, nest your database configuration in `config/database.yml`:
         | 
| 146 | 
            +
             | 
| 147 | 
            +
            ```yml
         | 
| 148 | 
            +
            # this should be similar to default, but with migrations_paths
         | 
| 149 | 
            +
            catalog_default: &catalog_default
         | 
| 150 | 
            +
              adapter: ...
         | 
| 151 | 
            +
              pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
         | 
| 152 | 
            +
              migrations_paths: db/catalog_migrate
         | 
| 153 | 
            +
             | 
| 154 | 
            +
            development:
         | 
| 155 | 
            +
              primary:
         | 
| 156 | 
            +
                <<: *default
         | 
| 157 | 
            +
                database: ...
         | 
| 158 | 
            +
              catalog:
         | 
| 159 | 
            +
                <<: *catalog_default
         | 
| 160 | 
            +
                database: ...
         | 
| 161 | 
            +
             | 
| 162 | 
            +
            test:
         | 
| 163 | 
            +
              primary:
         | 
| 164 | 
            +
                <<: *default
         | 
| 165 | 
            +
                database: ...
         | 
| 166 | 
            +
              catalog:
         | 
| 167 | 
            +
                <<: *catalog_default
         | 
| 168 | 
            +
                database: ...
         | 
| 169 | 
            +
             | 
| 170 | 
            +
            production:
         | 
| 171 | 
            +
              primary:
         | 
| 172 | 
            +
                <<: *default
         | 
| 173 | 
            +
                database: ...
         | 
| 174 | 
            +
              catalog:
         | 
| 175 | 
            +
                <<: *catalog_default
         | 
| 176 | 
            +
                database: ...
         | 
| 177 | 
            +
            ```
         | 
| 178 | 
            +
             | 
| 179 | 
            +
            Then change `establish_connection` in `app/models/catalog_record.rb` to:
         | 
| 180 | 
            +
             | 
| 181 | 
            +
            ```rb
         | 
| 182 | 
            +
            class CatalogRecord < ActiveRecord::Base
         | 
| 183 | 
            +
              establish_connection :catalog
         | 
| 184 | 
            +
            end
         | 
| 185 | 
            +
            ```
         | 
| 186 | 
            +
             | 
| 187 | 
            +
            And move:
         | 
| 188 | 
            +
             | 
| 189 | 
            +
            - `db/catalog/migrate` to `db/catalog_migrate`
         | 
| 190 | 
            +
            - `db/catalog/schema.rb` to `db/catalog_schema.rb` (or `db/catalog/structure.sql` to `db/catalog_structure.sql`).
         | 
| 191 | 
            +
             | 
| 192 | 
            +
            Then remove `multiverse` from your Gemfile. :tada:
         | 
| 193 | 
            +
             | 
| 194 | 
            +
            Now you can use the updated commands:
         | 
| 195 | 
            +
             | 
| 196 | 
            +
            ```sh
         | 
| 197 | 
            +
            rails db:migrate          # run all
         | 
| 198 | 
            +
            rails db:migrate:catalog  # runs catalog only
         | 
| 199 | 
            +
            ```
         | 
| 200 | 
            +
             | 
| 201 | 
            +
            Generate migrations with:
         | 
| 202 | 
            +
             | 
| 203 | 
            +
            ```sh
         | 
| 204 | 
            +
            rails generate migration add_name_to_products --database=catalog
         | 
| 205 | 
            +
            ```
         | 
| 206 | 
            +
             | 
| 207 | 
            +
            And models with:
         | 
| 208 | 
            +
             | 
| 209 | 
            +
            ```sh
         | 
| 210 | 
            +
            rails generate model Product --database=catalog --parent=CatalogRecord
         | 
| 211 | 
            +
            ```
         | 
| 212 | 
            +
             | 
| 213 | 
            +
            Happy scaling!
         | 
| 214 | 
            +
             | 
| 118 215 | 
             
            ## History
         | 
| 119 216 |  | 
| 120 217 | 
             
            View the [changelog](https://github.com/ankane/multiverse/blob/master/CHANGELOG.md)
         | 
    
        data/lib/multiverse/railtie.rb
    CHANGED
    
    | @@ -36,7 +36,8 @@ module Multiverse | |
| 36 36 | 
             
                              new_config[env.sub("#{Multiverse.db}_", "")] = config
         | 
| 37 37 | 
             
                            end
         | 
| 38 38 | 
             
                          end
         | 
| 39 | 
            -
                           | 
| 39 | 
            +
                          abort "Unknown DB: #{Multiverse.db}" if new_config.empty?
         | 
| 40 | 
            +
                          ActiveRecord::Tasks::DatabaseTasks.database_configuration = new_config
         | 
| 40 41 | 
             
                        end
         | 
| 41 42 |  | 
| 42 43 | 
             
                        # load config
         | 
    
        data/lib/multiverse/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: multiverse
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Andrew Kane
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 | 
            -
            bindir:  | 
| 9 | 
            +
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2019-10-28 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -109,28 +109,23 @@ dependencies: | |
| 109 109 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 110 | 
             
                    version: '0'
         | 
| 111 111 | 
             
            description: 
         | 
| 112 | 
            -
            email:
         | 
| 113 | 
            -
            - andrew@chartkick.com
         | 
| 112 | 
            +
            email: andrew@chartkick.com
         | 
| 114 113 | 
             
            executables: []
         | 
| 115 114 | 
             
            extensions: []
         | 
| 116 115 | 
             
            extra_rdoc_files: []
         | 
| 117 116 | 
             
            files:
         | 
| 118 | 
            -
            - ".gitignore"
         | 
| 119 | 
            -
            - ".travis.yml"
         | 
| 120 117 | 
             
            - CHANGELOG.md
         | 
| 121 | 
            -
            - Gemfile
         | 
| 122 118 | 
             
            - LICENSE.txt
         | 
| 123 119 | 
             
            - README.md
         | 
| 124 | 
            -
            - Rakefile
         | 
| 125 120 | 
             
            - lib/generators/multiverse/db_generator.rb
         | 
| 126 121 | 
             
            - lib/generators/multiverse/templates/record.rb.tt
         | 
| 127 122 | 
             
            - lib/multiverse.rb
         | 
| 128 123 | 
             
            - lib/multiverse/generators.rb
         | 
| 129 124 | 
             
            - lib/multiverse/railtie.rb
         | 
| 130 125 | 
             
            - lib/multiverse/version.rb
         | 
| 131 | 
            -
            - multiverse.gemspec
         | 
| 132 126 | 
             
            homepage: https://github.com/ankane/multiverse
         | 
| 133 | 
            -
            licenses: | 
| 127 | 
            +
            licenses:
         | 
| 128 | 
            +
            - MIT
         | 
| 134 129 | 
             
            metadata: {}
         | 
| 135 130 | 
             
            post_install_message: 
         | 
| 136 131 | 
             
            rdoc_options: []
         | 
| @@ -140,15 +135,14 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 140 135 | 
             
              requirements:
         | 
| 141 136 | 
             
              - - ">="
         | 
| 142 137 | 
             
                - !ruby/object:Gem::Version
         | 
| 143 | 
            -
                  version: ' | 
| 138 | 
            +
                  version: '2.2'
         | 
| 144 139 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 145 140 | 
             
              requirements:
         | 
| 146 141 | 
             
              - - ">="
         | 
| 147 142 | 
             
                - !ruby/object:Gem::Version
         | 
| 148 143 | 
             
                  version: '0'
         | 
| 149 144 | 
             
            requirements: []
         | 
| 150 | 
            -
             | 
| 151 | 
            -
            rubygems_version: 2.7.7
         | 
| 145 | 
            +
            rubygems_version: 3.0.3
         | 
| 152 146 | 
             
            signing_key: 
         | 
| 153 147 | 
             
            specification_version: 4
         | 
| 154 148 | 
             
            summary: Multiple databases for Rails
         | 
    
        data/.gitignore
    DELETED
    
    
    
        data/.travis.yml
    DELETED
    
    | @@ -1,20 +0,0 @@ | |
| 1 | 
            -
            language: ruby
         | 
| 2 | 
            -
            rvm: 2.5.1
         | 
| 3 | 
            -
            gemfile:
         | 
| 4 | 
            -
              - Gemfile
         | 
| 5 | 
            -
            sudo: false
         | 
| 6 | 
            -
            before_install:
         | 
| 7 | 
            -
              - gem install bundler
         | 
| 8 | 
            -
              - unset RAILS_ENV
         | 
| 9 | 
            -
              - unset RACK_ENV
         | 
| 10 | 
            -
            script: bundle exec rake test
         | 
| 11 | 
            -
            notifications:
         | 
| 12 | 
            -
              email:
         | 
| 13 | 
            -
                on_success: never
         | 
| 14 | 
            -
                on_failure: change
         | 
| 15 | 
            -
            env:
         | 
| 16 | 
            -
              - RAILS_VERSION=5.2.1
         | 
| 17 | 
            -
              - RAILS_VERSION=5.2.1 API=t
         | 
| 18 | 
            -
              - RAILS_VERSION=5.1.6
         | 
| 19 | 
            -
              - RAILS_VERSION=5.0.7
         | 
| 20 | 
            -
              - RAILS_VERSION=4.2.10
         | 
    
        data/Gemfile
    DELETED
    
    
    
        data/Rakefile
    DELETED
    
    
    
        data/multiverse.gemspec
    DELETED
    
    | @@ -1,30 +0,0 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            lib = File.expand_path("../lib", __FILE__)
         | 
| 3 | 
            -
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         | 
| 4 | 
            -
            require "multiverse/version"
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            Gem::Specification.new do |spec|
         | 
| 7 | 
            -
              spec.name          = "multiverse"
         | 
| 8 | 
            -
              spec.version       = Multiverse::VERSION
         | 
| 9 | 
            -
              spec.authors       = ["Andrew Kane"]
         | 
| 10 | 
            -
              spec.email         = ["andrew@chartkick.com"]
         | 
| 11 | 
            -
             | 
| 12 | 
            -
              spec.summary       = "Multiple databases for Rails"
         | 
| 13 | 
            -
              spec.homepage      = "https://github.com/ankane/multiverse"
         | 
| 14 | 
            -
             | 
| 15 | 
            -
              spec.files         = `git ls-files -z`.split("\x0").reject do |f|
         | 
| 16 | 
            -
                f.match(%r{^(test|spec|features)/})
         | 
| 17 | 
            -
              end
         | 
| 18 | 
            -
              spec.bindir        = "exe"
         | 
| 19 | 
            -
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         | 
| 20 | 
            -
              spec.require_paths = ["lib"]
         | 
| 21 | 
            -
             | 
| 22 | 
            -
              spec.add_dependency "activesupport", ">= 4.2"
         | 
| 23 | 
            -
              spec.add_dependency "activerecord", ">= 4.2"
         | 
| 24 | 
            -
              spec.add_dependency "railties", ">= 4.2"
         | 
| 25 | 
            -
             | 
| 26 | 
            -
              spec.add_development_dependency "bundler"
         | 
| 27 | 
            -
              spec.add_development_dependency "rake"
         | 
| 28 | 
            -
              spec.add_development_dependency "minitest"
         | 
| 29 | 
            -
              spec.add_development_dependency "sqlite3"
         | 
| 30 | 
            -
            end
         |