1. 05 10月, 2018 1 次提交
  2. 01 10月, 2018 1 次提交
    • D
      Make Webpacker the default JavaScript compiler for Rails 6 (#33079) · 4838c171
      David Heinemeier Hansson 提交于
      * Use Webpacker by default on new apps
      
      * Stop including coffee-rails by default
      
      * Drop using a js_compressor by default
      
      * Drop extra test for coffeescript inclusion by default
      
      * Stick with skip_javascript to signify skipping webpack
      
      * Don't install a JS runtime by default any more
      
      * app/javascript will be the new default directory for JS
      
      * Make it clear that this is just for configuring the default Webpack framework setup now
      
      * Start using the Webpack tag in the default layout
      
      * Irrelevant test
      
      * jQuery is long gone
      
      * Stop having asset pipeline compile default application.js
      
      * Add rails-ujs by default to the Webpack setup
      
      * Add Active Storage JavaScript to application.js pack by default
      
      * Consistent quoting
      
      * Add Turbolinks to default pack
      
      * Add Action Cable to default pack
      
      Need some work on how to set the global consumer that channels will
      work with. @javan?
      
      * Require all channels by default and use a separate consumer stub
      
      * Channel generator now targets Webpack style
      
      * Update task docs to match new generator style
      
      * Use uniform import style
      
      * Drop the JS assets generator
      
      It was barely helpful as it was. It’s no longer helpful in a Webpacked
      world. Sayonara!
      
      * Add app/javascript to the stats directories
      
      * Simpler import style
      
      Which match the other imports.
      
      * Address test failures from dropping JS compilation (and compression)
      
      * webpacker-default: Modify `AssetsGeneratorTest`
      
      Before:
      
      ```
      $ bin/test test/generators/assets_generator_test.rb
      Run options: --seed 46201
      
      F
      
      Failure:
      AssetsGeneratorTest#test_assets [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/assets_generator_test.rb:12]:
      Expected file "app/assets/javascripts/posts.js" to exist, but does not
      
      bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/assets_generator_test.rb:10
      
      .
      
      Finished in 0.031343s, 63.8101 runs/s, 95.7152 assertions/s.
      2 runs, 3 assertions, 1 failures, 0 errors, 0 skips
      ```
      
      After:
      
      ```
      $ bin/test test/generators/assets_generator_test.rb
      Run options: --seed 43571
      
      ..
      
      Finished in 0.030370s, 65.8545 runs/s, 65.8545 assertions/s.
      2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
      ```
      
      * webpacker-default: Modify `ChannelGeneratorTest`
      
      Before:
      
      ```
      $ bin/test test/generators/channel_generator_test.rb
      Run options: --seed 8986
      
      .F
      
      Failure:
      ChannelGeneratorTest#test_channel_with_multiple_actions_is_created [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:43]:
      Expected file "app/assets/javascripts/channels/chat.js" to exist, but does not
      
      bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:34
      
      .F
      
      Failure:
      ChannelGeneratorTest#test_channel_is_created [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:29]:
      Expected file "app/assets/javascripts/channels/chat.js" to exist, but does not
      
      bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:22
      
      E
      
      Error:
      ChannelGeneratorTest#test_cable_js_is_created_if_not_present_already:
      Errno::ENOENT: No such file or directory @ apply2files - /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/fixtures/tmp/app/assets/javascripts/cable.js
      
      bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:60
      
      F
      
      Failure:
      ChannelGeneratorTest#test_channel_suffix_is_not_duplicated [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:87]:
      Expected file "app/assets/javascripts/channels/chat.js" to exist, but does not
      
      bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:80
      
      F
      
      Failure:
      ChannelGeneratorTest#test_channel_on_revoke [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:77]:
      Expected file "app/assets/javascripts/cable.js" to exist, but does not
      
      bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:68
      
      Finished in 0.064384s, 108.7227 runs/s, 481.4861 assertions/s.
      7 runs, 31 assertions, 4 failures, 1 errors, 0 skips
      ```
      
      After:
      
      ```
      $ bin/test test/generators/channel_generator_test.rb
      Run options: --seed 44857
      
      .......
      
      Finished in 0.060243s, 116.1961 runs/s, 697.1764 assertions/s.
      7 runs, 42 assertions, 0 failures, 0 errors, 0 skips
      ```
      
      * Fix shared generator tests.
      
      * webpacker-default: Modify `ControllerGeneratorTest`
      
      The JS assets generator was dropped. ref. https://github.com/rails/rails/commit/46215b179483d3e4d264555f5a4952f43eb8142a
      
      * Revert "Simpler import style". It's currently failing with an error of "TypeError: undefined is not an object (evaluating '__WEBPACK_IMPORTED_MODULE_2_activestorage___default.a.start')". Waiting for @javan to have a look.
      
      This reverts commit 5d3ebb71059f635d3756cbda4ab9752027e09256.
      
      * require webpacker in test app
      
      * Add webpacker without making the build hang/timeout. (#33640)
      
      * use yarn workspaces to allow for installing unreleased packages and only generate js/bootsnap when required
      
      * no longer need to have webpacker in env templates as webpacker moved this config to yml file
      
      * Fix rubocop violation
      
      * Got the test passing for the running scaffold
      
      * update expected lines of code
      
      * update middleware tests to account for webpacker
      
      * disable js in plugins be default to get the tests passing (#34009)
      
      * clear codeclimate report issues
      
      * Anything newer than currently released is good
      
      * Use Webpacker development version during development of Rails
      
      * Edge should get development webpacker as well
      
      * Add changelog entry for Webpacker change
      4838c171
  3. 29 9月, 2018 3 次提交
    • Y
      Add `Style/RedundantFreeze` to remove redudant `.freeze` · aa3dcabd
      Yasuo Honda 提交于
      Since Rails 6.0 will support Ruby 2.4.1 or higher
      `# frozen_string_literal: true` magic comment is enough to make string object frozen.
      This magic comment is enabled by `Style/FrozenStringLiteralComment` cop.
      
      * Exclude these files not to auto correct false positive `Regexp#freeze`
       - 'actionpack/lib/action_dispatch/journey/router/utils.rb'
       - 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb'
      
      It has been fixed by https://github.com/rubocop-hq/rubocop/pull/6333
      Once the newer version of RuboCop released and available at Code Climate these exclude entries should be removed.
      
      * Replace `String#freeze` with `String#-@` manually if explicit frozen string objects are required
      
       - 'actionpack/test/controller/test_case_test.rb'
       - 'activemodel/test/cases/type/string_test.rb'
       - 'activesupport/lib/active_support/core_ext/string/strip.rb'
       - 'activesupport/test/core_ext/string_ext_test.rb'
       - 'railties/test/generators/actions_test.rb'
      aa3dcabd
    • Y
      445a74e1
    • G
      4775d3d0
  4. 27 9月, 2018 1 次提交
  5. 26 9月, 2018 1 次提交
  6. 24 9月, 2018 1 次提交
    • E
      Eagerly define attribute methods in production · 3b954786
      Eugene Kenny 提交于
      The attribute methods for a model are currently defined lazily the first
      time that model is instantiated, even when `config.eager_load` is true.
      This means the first request to use each model incurs the cost, which
      usually involves a database round trip to fetch the schema definition.
      
      By defining the attribute methods for all models while the application
      is booting, we move that work out of any individual request. When using
      a forking web server, this also reduces the number of times the schema
      definition is queried by doing it once in the parent process instead of
      from each forked process during their first request.
      3b954786
  7. 23 9月, 2018 2 次提交
    • S
      Remove private def · 0fe2bb81
      Sakshi Jain 提交于
      0fe2bb81
    • Y
      Enable `Performance/UnfreezeString` cop · 1b86d901
      yuuji.yaginuma 提交于
      In Ruby 2.3 or later, `String#+@` is available and `+@` is faster than `dup`.
      
      ```ruby
      # frozen_string_literal: true
      
      require "bundler/inline"
      
      gemfile(true) do
        source "https://rubygems.org"
      
        gem "benchmark-ips"
      end
      
      Benchmark.ips do |x|
        x.report('+@') { +"" }
        x.report('dup') { "".dup }
        x.compare!
      end
      ```
      
      ```
      $ ruby -v benchmark.rb
      ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
      Warming up --------------------------------------
                        +@   282.289k i/100ms
                       dup   187.638k i/100ms
      Calculating -------------------------------------
                        +@      6.775M (± 3.6%) i/s -     33.875M in   5.006253s
                       dup      3.320M (± 2.2%) i/s -     16.700M in   5.032125s
      
      Comparison:
                        +@:  6775299.3 i/s
                       dup:  3320400.7 i/s - 2.04x  slower
      
      ```
      1b86d901
  8. 22 9月, 2018 1 次提交
    • R
      Make sure this test check the issue solved in #31135 · d3b95218
      Rafael Mendonça França 提交于
      Before this change this test was passing even if we revert #31135. The
      reason for that is that `app 'development'` will load the environment in
      the test process and it is happening before db_create_and_drop is
      called.
      
      This was not asserting that the environment was loaded in the db:create
      task itself.
      
      To test it we enhance the db:create task with a block that writes to a
      tmp file the value of the config. If the environment is loaded before
      that task enhancement runs the content of the file will have "true"
      insteand of "false".
      d3b95218
  9. 21 9月, 2018 2 次提交
    • S
      Switch to supports_cache_versioning? check to a class method · 3424bd83
      schneems 提交于
      - Moving the `supports_cache_versioning?` check to a class method. 
      - Shorten the method doc. 
      - Expand on the error message.
      3424bd83
    • S
      [close #33907] Error when using "recyclable" cache keys with a store that does not support it · 135d3e15
      schneems 提交于
      If you are using the "in cache versioning" also known as "recyclable cache keys" the cache store must be aware of this scheme, otherwise you will generate cache entries that never invalidate.
      
      This PR adds a check to the initialization process to ensure that if recyclable cache keys are being used via 
      
      ```
      config.active_record.cache_versioning = true
      ```
      
      Then the cache store needs to show that it supports this versioning scheme. Cache stores can let Rails know that they support this scheme by adding a method `supports_in_cache_versioning?` and returning true.
      135d3e15
  10. 20 9月, 2018 1 次提交
    • W
      Support environment specific credentials file. (#33521) · e0d3313b
      Wojciech Wnętrzak 提交于
      For `production` environment look first for `config/credentials/production.yml.enc` file that can be decrypted by
      `ENV["RAILS_MASTER_KEY"]` or `config/credentials/production.key` master key.
      Edit given environment credentials file by command `rails credentials:edit --environment production`.
      Default behavior can be overwritten by setting `config.credentials.content_path` and `config.credentials.key_path`.
      e0d3313b
  11. 15 9月, 2018 1 次提交
  12. 14 9月, 2018 1 次提交
  13. 13 9月, 2018 1 次提交
  14. 12 9月, 2018 4 次提交
    • B
      Build string set when `filter_attributes` is assigned · d1a14865
      bogdanvlviv 提交于
      It would allow `filter_attributes` to be reused across multiple
      calls to `#inspect` or `#pretty_print`.
      
      - Add `require "set"`
      - Remove `filter_attributes` instance reader. I think there is no need
      to keep it.
      d1a14865
    • E
      Fix query cache to load before first request · 349db176
      Eileen Uchitelle 提交于
      In a test app we observed that the query cache was not enabled on the
      first request. This was because the query cache hooks are installed on
      load and active record is loaded in the middle of the first request.
      
      If we remove the `on_load` from the railtie the query cache hooks will
      be installed before the first request, allowing the cache to be enabled
      on that first request.
      
      This is ok because query cache doesn't load anything else, only itself
      so we're not eager loading all of active record before the first
      request, just the query cache hooks.
      
      [Eileen M. Uchitelle & Matthew Draper]
      349db176
    • X
      use "minitest" consistently · f589e20b
      Xavier Noria 提交于
      The name of the minitest library is spelled that way: regular font, and
      lowercase. Lowercase is used even at the beginning of sentences, see
      
          http://docs.seattlerb.org/minitest/
      
      I double-checked this with @zenspider too (thanks!).
      f589e20b
    • M
  15. 11 9月, 2018 2 次提交
  16. 07 9月, 2018 2 次提交
  17. 04 9月, 2018 1 次提交
    • Y
      Respect config setting when output deprecation notice in rake tasks · fb3642b0
      yuuji.yaginuma 提交于
      The rake tasks which became deprecate now does not load the environment.
      Therefore, even if the application specifies the behavior of deprecating,
      the message is output to stderr ignoring the specification.
      
      It seems that this is not the expected behavior.
      We should respect the setting even in the rake tasks.
      fb3642b0
  18. 01 9月, 2018 2 次提交
    • Y
      Remove needless test order config · 02b4ba64
      yuuji.yaginuma 提交于
      These were added for avoiding warnings and for testing in
      e4c529ea and 6ea7065a.
      
      Now the default is `:random`, and since the tests added with it are
      removed. That config is unnecessary.
      02b4ba64
    • E
      Convert configs_for to kwargs, add include_replicas · a572d228
      Eileen Uchitelle 提交于
      Changes the `configs_for` method from using traditional arguments to
      using kwargs. This is so I can add the `include_replicas` kwarg without
      having to always include `env_name` and `spec_name` in the method call.
      
      `include_replicas` defaults to false because everywhere internally in
      Rails we don't want replicas. `configs_for` is for iterating over
      configurations to create / run rake tasks, so we really don't ever need
      replicas in that case.
      a572d228
  19. 31 8月, 2018 2 次提交
  20. 30 8月, 2018 3 次提交
    • E
      Add migrations_paths option to migration generator · b551a707
      Eileen Uchitelle 提交于
      Adds an option to the migration generator to allow setting the
      migrations paths for that migration. This is useful for applications
      that use multiple databases and put migrations per database in their own
      directories.
      
      ```
      bin/rails g migration CreateHouses address:string --migrations-paths=db/kingston_migrate
            invoke  active_record
            create    db/kingston_migrate/20180830151055_create_houses.rb
      ```
      b551a707
    • E
      Refactors Active Record connection management · fdf3f0b9
      Eileen Uchitelle 提交于
      While the three-tier config makes it easier to define databases for
      multiple database applications, it quickly became clear to offer full
      support for multiple databases we need to change the way the connections
      hash was handled.
      
      A three-tier config means that when Rails needed to choose a default
      configuration (in the case a user doesn't ask for a specific
      configuration) it wasn't clear to Rails which the default was. I
      [bandaid fixed this so the rake tasks could work](#32271) but that fix
      wasn't correct because it actually doubled up the configuration hashes.
      
      Instead of attemping to manipulate the hashes @tenderlove and I decided
      that it made more sense if we converted the hashes to objects so we can
      easily ask those object questions. In a three tier config like this:
      
      ```
      development:
        primary:
          database: "my_primary_db"
        animals:
          database; "my_animals_db"
      ```
      
      We end up with an object like this:
      
      ```
        @configurations=[
          #<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd1acbded10
            @env_name="development",@spec_name="primary",
            @config={"adapter"=>"sqlite3", "database"=>"db/development.sqlite3"}>,
          #<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd1acbdea90
            @env_name="development",@spec_name="animals",
            @config={"adapter"=>"sqlite3", "database"=>"db/development.sqlite3"}>
      ]>
      ```
      
      The configurations setter takes the database configuration set by your
      application and turns them into an
      `ActiveRecord::DatabaseConfigurations` object that has one getter -
      `@configurations` which is an array of all the database objects.
      
      The configurations getter returns this object by default since it acts
      like a hash in most of the cases we need. For example if you need to
      access the default `development` database we can simply request it as we
      did before:
      
      ```
      ActiveRecord::Base.configurations["development"]
      ```
      
      This will return primary development database configuration hash:
      
      ```
      { "database" => "my_primary_db" }
      ```
      
      Internally all of Active Record has been converted to use the new
      objects. I've built this to be backwards compatible but allow for
      accessing the hash if needed for a deprecation period. To get the
      original hash instead of the object you can either add `to_h` on the
      configurations call or pass `legacy: true` to `configurations.
      
      ```
      ActiveRecord::Base.configurations.to_h
      => { "development => { "database" => "my_primary_db" } }
      
      ActiveRecord::Base.configurations(legacy: true)
      => { "development => { "database" => "my_primary_db" } }
      ```
      
      The new configurations object allows us to iterate over the Active
      Record configurations without losing the known environment or
      specification name for that configuration. You can also select all the
      configs for an env or env and spec. With this we can always ask
      any object what environment it belongs to:
      
      ```
      db_configs = ActiveRecord::Base.configurations.configurations_for("development")
      => #<ActiveRecord::DatabaseConfigurations:0x00007fd1acbdf800
        @configurations=[
          #<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd1acbded10
            @env_name="development",@spec_name="primary",
            @config={"adapter"=>"sqlite3", "database"=>"db/development.sqlite3"}>,
          #<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd1acbdea90
            @env_name="development",@spec_name="animals",
            @config={"adapter"=>"sqlite3", "database"=>"db/development.sqlite3"}>
      ]>
      
      db_config.env_name
      => "development"
      
      db_config.spec_name
      => "primary"
      
      db_config.config
      => { "adapter"=>"sqlite3", "database"=>"db/development.sqlite3" }
      ```
      
      The configurations object is more flexible than the configurations hash
      and will allow us to build on top of the connection management in order
      to add support for primary/replica connections, sharding, and
      constructing queries for associations that live in multiple databases.
      fdf3f0b9
    • E
      Remove this conditional · a64dba1d
      Eileen Uchitelle 提交于
      I removed the argument so I should remove the conditional too.
      a64dba1d
  21. 29 8月, 2018 4 次提交
    • E
      Remove unused argument · c91f1482
      Eileen Uchitelle 提交于
      The test that used this was updated and it's no longer needed.
      c91f1482
    • E
      Drop load_database_yaml and fix test · 6b5df90f
      Eileen Uchitelle 提交于
      We originally did the whole `load_database_yaml` thing because this test
      wasn't cooperating and we needed to finish the namespaced rake tasks for
      multiple databases.
      
      However, it turns out that YAML can't eval ERB if you don't tell it it's
      ERB so you get Pysch parse errors if you're using multi-line ERB or
      ERB with conditionals. It's a hot mess.
      
      After trying a few things and thinking it over we decided that it wasn't
      worth bandaiding over, the test needed to be improved. The test was
      added in #31135 to test that the env is loaded in these tasks. But it
      was blowing up because we were trying to read a database name out of the
      configuration - however that's not the purpose of this change. We want
      to read environment files in the rake tasks, but not in the config
      file.
      
      In this PR we changed the test to test what the PR was actually fixing.
      We've also deleted the `load_database_yaml` because it caused more
      problems than it was worth. This should fix the issues described in
      https://github.com/rails/rails/pull/32274#issuecomment-384161057. We
      also had these problems at GitHub.
      Co-authored-by: Nalimi <aibrahim2k2@gmail.com>
      6b5df90f
    • B
      Prevent leaking of user's DB credentials on `rails db:create` failure · 9b455fe6
      bogdanvlviv 提交于
      Issue #27852 reports that when `rails db:create` fails, it causes
      leaking of user's DB credentials to $stderr.
      We print a DB's configuration hash in order to help users more quickly
      to figure out what could be wrong with his configuration.
      
      This commit changes message from
      "Couldn't create database for #{configuration.inspect}" to
      "Couldn't create '#{configuration['database']}' database. Please check your configuration.".
      
      There are two PRs that fixing it #27878, #27879, but they need a bit more work.
      I decided help to finish this and added Author of those PRs credit in this commit.
      
      Since it is a security issue, I think we should backport it to
      `5-2-stable`, and `5-1-stable`.
      Guided by https://edgeguides.rubyonrails.org/maintenance_policy.html#security-issues
      
      Fixes #27852
      Closes #27879
      Related to #27878
      
      [Alexander Marrs & bogdanvlviv]
      9b455fe6
    • Y
      Generate the same value as a label of view in system test template · 28e50850
      yuuji.yaginuma 提交于
      In the system test template, enter a value based on label.
      However, since `label` method does not use `titleize` by default.
      If generate a value including underscore, cannot find a label and the test
      will fail.
      
      ```
      $ ./bin/rails g scaffold user name:string phone_number:string
      $ ./bin/rails t test/system/users_test.rb
      
      E
      
      Error:
      UsersTest#test_creating_a_User:
      Capybara::ElementNotFound: Unable to find field "Phone Number"
          test/system/users_test.rb:18:in `block in <class:UsersTest>'
      ```
      
      This removes unnecessary `titleize` so that the generated file will pass
      even if the attribute contains an underscore.
      28e50850
  22. 27 8月, 2018 1 次提交
  23. 25 8月, 2018 1 次提交
  24. 20 8月, 2018 1 次提交