Commit Graph

75264 Commits

Author SHA1 Message Date
Edouard CHIN 82e767f3d3 Don't assume all database in SQLite are files:
- SQlite allow database to be specified as URL (given that URI filename
  interpretation was turned on on the connection.)

  This commit is necessary for the read_uncommitted transaction
  feature because SQLite doesn't allow to enable the shared-cache mode
  if the database name is `:memory:`. It has to be a URI (`file::memory`)

  Ref https://www.sqlite.org/sharedcache.html#shared_cache_and_in_memory_databases
2019-12-09 15:56:44 +01:00
Edouard CHIN cf5b6199df Added posibility to open a `read_uncommitted` transaction on SQLite:
- ### Use case

  I'd like to be able to see changes made by a connection writer
  within a connection reader before the writer transaction commits
  (aka `read_uncommitted` transaction isolation level).

  ```ruby
  conn1.transaction do
    Dog.create(name: 'Fido')
    conn2.transaction do
      Dog.find(name: 'Fido') # -> Can't see the dog untill conn1 commits the transaction
    end
  end
  ```

  Other adapters in Rails (mysql, postgres) already supports multiple
  types of isolated db transaction.
  SQLite doesn't support the 4 main ones but it supports
  `read_uncommitted` and `serializable` (the default one when opening
  a transaction)

  ### Solution

  This PR allow developers to open a `read_uncommitted` transaction by
  setting the PRAGMA `read_uncommitted` to true for the duration
  of the transaction. That PRAGMA can only be enabled if the SQLite
  connection was established with the [shared-cache mode](https://www.sqlite.org/sharedcache.html)

  This feature can also benefit the framework and we could potentially
  get rid of the `setup_shared_connection_pool` inside tests which
  was a solution in the context of a multi-db app so that the reader
  can see stuff from the open transaction writer but has some [caveats](https://github.com/rails/rails/issues/37765#event-2828609021).

  ### Edge case

  Shared-cache mode can be enabled for in memory database as well,
  however for backward compatibility reasons, SQLite only allows
  to set the shared-cache mode if the database name is a URI.
  It won't allow it if the database name is `:memory`; it has to be
  changed to `file::memory` instead.
2019-12-09 15:56:44 +01:00
Rafael Mendonça França e67fdc5aeb
Revert "Merge pull request #37504 from utilum/no_implicit_conversion_of_nil"
This reverts commit 4e105385d0, reversing
changes made to 62b4383909.

The change in Ruby that made those changes required was reverted in
8852fa8760
2019-12-09 11:50:39 -03:00
Rafael França 7c3e4409fd
Merge pull request #37913 from kirikiriyamama/merge-shared-configuration-deeply
Rails::Application#config_for merges shared configuration deeply
2019-12-09 11:04:47 -03:00
kirikiriyamama 2b17c114eb Add CHANGELOG entry for 4d858b3f2a 2019-12-09 15:20:27 +09:00
kirikiriyamama 4d858b3f2a Merge shared configuration deeply 2019-12-08 22:18:08 +09:00
Dalto Curvelano b4ee2d5f65 Update documentation for setting up database tests (#37475)
[ci skip]
2019-12-08 11:06:35 +09:00
finn 9024fa31e2 update getting_started guide to reduce confusion [ci skip] (#37750)
Add a yellow "NOTE" block to see if the guide looks better.
2019-12-08 09:25:49 +09:00
Shu Fujita 97b0833458 Update docs of String methods using ActiveSupport::Inflector [ci skip] (#37890) 2019-12-07 12:11:15 +09:00
Peter Zhu d0dd199206 Make sure variant is created on the same service 2019-12-06 22:02:07 -05:00
Gannon McGibbon 352445b2b6
Merge pull request #37904 from peterzhu2118/as-remove-query-params
Remove unused query params in DiskService
2019-12-06 18:40:12 -05:00
Peter Zhu 2e15092942 Remove query params in DiskService 2019-12-06 16:52:30 -05:00
Gannon McGibbon 8cf3f9ad23
Merge pull request #37897 from peterzhu2118/as-public-disk-blob-fixes
Use DiskController for both public and private files
2019-12-06 16:41:37 -05:00
Peter Zhu fbb83d78c3 Use DiskController for both public and private files 2019-12-06 16:02:16 -05:00
George Claghorn 2963a30cf9 Go through ActiveStorage::Blob::Representable#variant to pick up tracking 2019-12-06 14:20:38 -05:00
George Claghorn f7da355409 Add resolved route for ActiveStorage::VariantWithRecord 2019-12-06 14:03:07 -05:00
George Claghorn c9502a33a1 Correct migration name 2019-12-06 13:30:58 -05:00
George Claghorn 7d0327bbbf Track Active Storage variants in the database 2019-12-06 13:26:51 -05:00
Rafael França 758e4f8406
Merge pull request #37892 from Edouard-chin/ec-bring-back-drawing-external-routes
Bring back feature that allows loading external route files:
2019-12-06 11:10:26 -03:00
Carlos Antonio da Silva 732cfd2781 Remove extraneous `begin..end` around single `case` statement 2019-12-06 10:33:16 -03:00
Edouard CHIN 33bf253282 Bring back feature that allows loading external route iles:
= This feature existed back in 2012 5e7d6bba79
  but got reverted with the incentive that there was a better approach.
  After discussions, we agreed that it's a useful feature for apps
  that have a really large set of routes.

  Co-authored-by: Yehuda Katz <wycats@gmail.com>
2019-12-06 14:20:12 +01:00
Xavier Noria 66197a3a40 unlinks Ruby on Rails Tutorial [skip ci]
I added myself links to the Ruby on Rails Tutorial years ago, after
meeting Michael in a RailsConf.

By then, the book was a commercial product, but had a free online
version and I thought it could be a good resource complementing the
official documentation.

Nowadays, only a few sample chapters are available for free, and I
don't consider these links to be fair with the rest of commercial
books about Rails anymore.
2019-12-06 11:26:24 +01:00
Ryuta Kamizono 9c139f82db
Merge pull request #37898 from tgxworld/revert_evented_routes_reloader
Revert "Use `app.config.file_watcher` for watcher in `RoutesReloader`"
2019-12-06 16:10:42 +09:00
Alan Tan 767cec041d Revert "Use `app.config.file_watcher` for watcher in `RoutesReloader`"
This reverts commit 28e44f472d.

A limitation of Listen is that it currently only supports watching directories.
Therefore, watching `config/routes.rb` will end up watching the entire `config` directory
if we use the evented file watcher. This causes problems especially if symlinks are present
in the `config` directory.
2019-12-06 14:58:07 +08:00
Ryuta Kamizono 3ae38069e9
Merge pull request #37792 from glaszig/fix/actiondispatch/non-headless-driver-options
system tests: properly set driver options for non-headless drivers
2019-12-06 13:41:50 +09:00
Ryuta Kamizono 3b0c3124b1
Merge pull request #37853 from tgxworld/use_proper_file_watcher
Use `app.config.file_watcher` for watcher in `RoutesReloader`
2019-12-06 09:59:14 +09:00
Ryuta Kamizono 2821e8d02a
Merge pull request #37896 from tgxworld/upgrade_listen
Upgrade listen to 3.2.1 for darwin fixes
2019-12-06 09:49:54 +09:00
George Claghorn 317760c5ad Use ActiveStorage::Preview#url instead of deprecated #service_url 2019-12-05 19:41:04 -05:00
Alan Tan c9430dba39 Upgrade listen to 3.2.1 for darwin fixes
Pulls in a fix where the darwin adapter no longers create a `fsevent_watch` process
for each directory that Listen has been asked to watch.
2019-12-06 08:21:24 +08:00
Kasper Timm Hansen 6f45307960
Merge pull request #37666
Closes #37666
2019-12-05 21:51:41 +01:00
Santiago Bartesaghi 8872ec431a
perform_caching config affects collection caching 2019-12-05 21:46:02 +01:00
George Claghorn 9e06289a3b Switch to the writer DB to generate ASt previews 2019-12-05 12:56:42 -05:00
Ryuta Kamizono 34d66ca6ba
Merge pull request #37693 from elia/patch-1
Don't parse DB specific locking docs as code

[ci skip]
2019-12-05 12:29:27 +09:00
Ryuta Kamizono 868bf88354
Merge pull request #37744 from seejohnrun/around_action-docs
Add guide for inline around_action
2019-12-05 11:38:33 +09:00
George Claghorn 96d31ac9cd Style 2019-12-04 21:10:58 -05:00
Ryo Nakamura c12997fcff Add bug report templates for Active Storage 2019-12-04 21:02:43 -05:00
yuuji.yaginuma 0f724a3111 Revert "Merge pull request #37881 from pierredemilly/patch-1"
This reverts commit 5bbb2a6521, reversing
changes made to f9e4906c37.

Reason: Since #36866, we use `azure-storage-blob` gem. So the original
description is correct.
2019-12-05 08:28:35 +09:00
Ryuta Kamizono 8ce67ab530
Merge pull request #37886 from tjschuck/retry_on_wait_jitter_doc_fixes
Small doc fixes for ActiveJob::Exceptions::ClassMethods#retry_on

[ci skip]
2019-12-05 08:12:36 +09:00
Ryuta Kamizono 999e0ee93a
Merge pull request #37882 from kamipo/should_keep_zero_duration_parts
Should keep the original parts for zero duration
2019-12-05 07:33:20 +09:00
T.J. Schuck fa429f9a51 Small doc fixes for ActiveJob::Exceptions::ClassMethods#retry_on
Follow up to https://github.com/rails/rails/pull/31872

Particularly, the closing `</tt>` tag of the documented wait algorithm had a misplaced `<`.  Threw in a space between `15% (0.15)` for good measure.

[ci skip]
2019-12-04 16:27:41 -05:00
Aaron Patterson 8c121ce90e
Merge pull request #37872 from joelhawksley/content-tag-hash-class-conditional
Add support for conditional values to TagBuilder
2019-12-04 11:50:54 -08:00
Rafael França 777595212e
Merge pull request #37834 from Shopify/handle-unrelated-name-error-in-router
Distinguish missing controller exceptions from unrelated NameError
2019-12-04 14:13:21 -03:00
Eileen M. Uchitelle 5bbb2a6521
Merge pull request #37881 from pierredemilly/patch-1
Update active_storage_overview.md
2019-12-04 09:08:26 -08:00
Eileen M. Uchitelle f9e4906c37
Merge pull request #37874 from eileencodes/deprecate-connected_to-database-key-without-replacement
Deprecate `database` kwarg from `connected_to` without replacement
2019-12-04 09:08:01 -08:00
Rafael França b4e7bb7492
Merge pull request #37876 from Shopify/remove-deprecated-non-symbol-access-to-config_for
Remove deprecated non-symbol access to nested config_for hashes
2019-12-04 13:46:22 -03:00
Jean Boussier 54878cd44b Distinguish missing controller exceptions from unrelated NameError
Fix: https://github.com/rails/rails/issues/37650

The classic autoloader used to totally unregister any constant that
failed midway. Which mean `"SomeConst".constantize` was idempotent.

However Zeitwerk rely on normal `Kernel#require` behavior, which mean
that if an exception is raised during a class/module definition,
it will be left incompletely defined. For instance:

```ruby
class FooController
  ::DoesNotExist

  def index
  end
end
```

Will leave `FooController` defined, but without its `index` method.

Because of this, when silencing a NameError, it's important
to make sure the missing constant is really the one we were trying
to load.
2019-12-04 16:11:54 +01:00
glaszig 769188e1c3 forward system test driver options configured
in initializer block to the selenium driver
for non-headless browsers

* refactored browser options initialization.
* improved method names in AD::SystemTesting::Browser
* improved AD::SystemTest driver tests
2019-12-04 15:57:00 +01:00
Étienne Barrié e5e9c558a3 Remove deprecated non-symbol access to nested config_for hashes 2019-12-04 09:55:56 -05:00
Pierre de Milly 5b5d889181
Update active_storage_overview.md 2019-12-04 15:00:42 +01:00
Ryuta Kamizono 2193c0ac67 Should keep the original parts for zero duration
Follow up to https://github.com/rails/rails/pull/37849#issuecomment-560557239.

Without this, `0.days` is considered as `0.seconds` due to #31310.
We should not lose the original parts.
2019-12-04 22:59:21 +09:00