1. 09 11月, 2019 1 次提交
  2. 07 11月, 2019 8 次提交
  3. 06 11月, 2019 6 次提交
    • K
      Merge pull request #37652 from tatsuyafw/remove-needless-require · 14d958ec
      Kasper Timm Hansen 提交于
      Remove needless `require "pp"`
      14d958ec
    • T
      Remove needless `require "pp"` · 41f0fb8c
      Tatsuya Hoshino 提交于
      In Ruby 2.5 and later, `Kernel#pp` is automatically loaded.
      
      https://bugs.ruby-lang.org/issues/14123
      
      This changes remove the needless `require "pp"`.
      41f0fb8c
    • R
      Merge pull request #37646 from yahonda/diag_oracle_enhanced_1943 · 803c6ba7
      Ryuta Kamizono 提交于
      Address `no implicit conversion of Arel::Attributes::Attribute into String`
      803c6ba7
    • Y
      Address `no implicit conversion of Arel::Attributes::Attribute into String` · eb6c8577
      Yasuo Honda 提交于
      https://github.com/rails/rails/commit/4a9ef5e1202cdab1882989eb561b0dc854c9891b triggers this failure,
      then restored the original code for `activerecord/lib/arel/visitors/oracle.rb` .
      
      ```
      $ bundle exec rspec ./spec/active_record/connection_adapters/oracle_enhanced/context_index_spec.rb:92
      ==> Loading config from ENV or use default
      ==> Running specs with MRI version 2.6.5
      ==> Effective ActiveRecord version 6.1.0.alpha
      ... snip ...
      Run options: include {:locations=>{"./spec/active_record/connection_adapters/oracle_enhanced/context_index_spec.rb"=>[92]}}
      F
      
      Failures:
      
        1) OracleEnhancedAdapter context index on single table should create single VARCHAR2 column index
           Failure/Error: expect(Post.contains(:title, word).to_a).to eq([@post2, @post1])
      
           TypeError:
             no implicit conversion of Arel::Attributes::Attribute into String
           # /home/yahonda/git/rails/activerecord/lib/arel/visitors/oracle.rb:107:in `match?'
           # /home/yahonda/git/rails/activerecord/lib/arel/visitors/oracle.rb:107:in `block (2 levels) in order_hacks'
           # /home/yahonda/git/rails/activerecord/lib/arel/visitors/oracle.rb:106:in `any?'
           # /home/yahonda/git/rails/activerecord/lib/arel/visitors/oracle.rb:106:in `block in order_hacks'
           # /home/yahonda/git/rails/activerecord/lib/arel/visitors/oracle.rb:105:in `any?'
           # /home/yahonda/git/rails/activerecord/lib/arel/visitors/oracle.rb:105:in `order_hacks'
           # /home/yahonda/git/rails/activerecord/lib/arel/visitors/oracle.rb:8:in `visit_Arel_Nodes_SelectStatement'
           # /home/yahonda/git/rails/activerecord/lib/arel/visitors/visitor.rb:30:in `visit'
           # /home/yahonda/git/rails/activerecord/lib/arel/visitors/visitor.rb:11:in `accept'
           # /home/yahonda/git/rails/activerecord/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb:10:in `accept'
           # /home/yahonda/git/rails/activerecord/lib/arel/visitors/to_sql.rb:18:in `compile'
           # /home/yahonda/git/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:25:in `to_sql_and_binds'
           # /home/yahonda/git/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:63:in `select_all'
           # /home/yahonda/git/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:107:in `select_all'
           # /home/yahonda/git/rails/activerecord/lib/active_record/querying.rb:46:in `find_by_sql'
           # /home/yahonda/git/rails/activerecord/lib/active_record/relation.rb:826:in `block in exec_queries'
           # /home/yahonda/git/rails/activerecord/lib/active_record/relation.rb:844:in `skip_query_cache_if_necessary'
           # /home/yahonda/git/rails/activerecord/lib/active_record/relation.rb:811:in `exec_queries'
           # /home/yahonda/git/rails/activerecord/lib/active_record/relation.rb:629:in `load'
           # /home/yahonda/git/rails/activerecord/lib/active_record/relation.rb:250:in `records'
           # /home/yahonda/git/rails/activerecord/lib/active_record/relation.rb:245:in `to_ary'
           # ./spec/active_record/connection_adapters/oracle_enhanced/context_index_spec.rb:95:in `block (4 levels) in <top (required)>'
           ... snip ...
      ```
      eb6c8577
    • E
      Add an intermediary called RoleManager to manage connections · a2a525bb
      eileencodes 提交于
      This PR is an alternate solution to #37388. While there are benefits
      to merging #37388 it changes the public API and swaps around existing
      concepts for how connection management works. The changes are
      backwards-incompatible and pretty major. This will have a negative impact
      on gems and applications relying on how conn management currently works.
      
      **Background:**
      
      Shopify and other applications need sharding but Rails has
      made it impossible to do this because a handler can only hold one
      connection pool per class. Sharded apps need to hold multiple
      connections per handler per class.
      
      This PR aims to solve only that problem.
      
      **What this PR does:**
      
      In this PR we've added a `RoleManager` class that can hold multiple
      `Roles`. Each `Role` holds the `db_config`,
      `connection_specification_name`, `schema_cache` and `pool`. By default
      the `RoleManager` holds a single reference from a `default` key to the
      `Role` instance. A sharded/multi-tenant app can pass an optional second
      argument to `remove_connection`, `retrieve_connection_pool`,
      `establish_connection` and `connected?` on the handler, thus allowing
      for multiple connections belonging to the same class/handler without
      breaking backwards compatibility.
      
      By using the `RoleManager` we can avoid altering the public API, moving
      around handler/role concepts, and achieve the internal needs for
      establishing multiple connections per handler per class.
      
      **A note about why we opened this PR:**
      
      We very much appreciate the work that went into #37388 and in no way mean
      to diminish that work. However, it breaks the following public APIs:
      
      * `#retrieve_connection`, `#connected?`, and `#remove_connection` are
      public methods on handler and can't be changed from taking a spec to a
      role.
      * The knowledge that the handler keys are symbols relating to a role
      (`:writing`/`:reading`) is public - changing how handlers are accessed
      will break apps/libraries.
      
      In addition it doesn't solve the problem of mapping a single connection
      to a single class since it has a 1:1 mapping of `class (handler) -> role
      (writing) -> db_config`. Multiple pools in a writing role can't exist
      in that implementation.
      
      The new PR solves this by using the `RoleManager` to hold multiple connection
      objects for the same class. This lets a handler hold a role manager
      which can hold as many roles for that writer as the app needs.
      
      **Regarding the `Role` name:**
      
      When I originally designed the API for multiple databases, it wasn't
      accidental that handler and role are the same concept. Handler is the
      internal concept (since that's what was there already) and Role was the
      public external concept. Meaning, role and handler were meant to
      be the same thing. The concept here means that when you switch a
      handler/role, Rails automatically can pick up the connection on the
      other role by knowing the specification name. Changing this would mean not
      just that we need to rework how GitHub and many many gems work, but also
      means retraining users of Rails 6.0 that all these concepts changed.
      
      Since this PR doesn't move around the concepts in connection
      management and instead creates an intermediary between `handler` and
      `role` to manage the connection data (`db_config`, `schema_cache`,
      `pool`, and `connection_specification`) we think that `Role` and
      `RoleManager` are the wrong name.
      
      We didn't change it yet in this PR because we wanted to keep change
      churn low for initial review. We also haven't come up with a better
      name yet. 😄
      
      **What this PR does not solve:**
      
      Our PR here solves a small portion of the problem - it allows models to
      have multiple connections on a class. It doesn't aim to solve any other
      problems than that. Going forward we'll need to still solve the
      following problems:
      
      * `DatabaseConfig` doesn't support a sharding configuration
      * `connects_to`/`connected_to` still needs a way to switch connections for shards
      * Automatic switching of shards
      * `connection_specification_name` still exists
      
      **The End**
      
      Thanks for reading this far. These problems aren't easy to solve. John
      and I spent a lot of time trying different things and so I hope that
      this doesn't come across as if we think we know better. I would have
      commented on the other PR what changes to make but we needed to try out
      different solutions in order to get here.
      
      Ultimately we're aiming to change as little as the API as possible. Even
      if the handler/role -> manager -> db_config/pool/etc isn't how we'd
      design connection management if we could start over, we also don't want
      to break public APIs. It's important that we make things better while
      maintaining compatibility.
      
      The `RoleManager` class makes it possible for us to fix the underlying
      problem while maintaining all the backwards compatibility in the public
      API.
      
      We all have the same goal; to add sharding support to Rails. Let me know
      your thoughts on this change in lieu of #37388 and if you have questions.
      Co-authored-by: NJohn Crepezzi <seejohnrun@github.com>
      a2a525bb
    • G
      Merge pull request #37490 from huacnlee/fix-aws-public-acl · 1404da26
      Gannon McGibbon 提交于
      Ensure public-read ACL for S3 service with public mode.
      1404da26
  4. 05 11月, 2019 6 次提交
  5. 04 11月, 2019 3 次提交
  6. 03 11月, 2019 2 次提交
  7. 02 11月, 2019 4 次提交
  8. 01 11月, 2019 2 次提交
  9. 31 10月, 2019 8 次提交