aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Use advisory locks to prevent concurrent migrationsSam Davies2015-10-308-23/+322
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Addresses issue #22092 - Works on Postgres and MySQL - Uses advisory locks because of two important properties: 1. The can be obtained outside of the context of a transaction 2. They are automatically released when the session ends, so if a migration process crashed for whatever reason the lock is not left open perpetually - Adds get_advisory_lock and release_advisory_lock methods to database adapters - Attempting to run a migration while another one is in process will raise a ConcurrentMigrationError instead of attempting to run in parallel with undefined behavior. This could be rescued and the migration could exit cleanly instead. Perhaps as a configuration option? Technical Notes ============== The Migrator uses generate_migrator_advisory_lock_key to build the key for the lock. In order to be compatible across multiple adapters there are some constraints on this key. - Postgres limits us to 64 bit signed integers - MySQL advisory locks are server-wide so we have to scope to the database - To fulfil these requirements we use a Migrator salt (a randomly chosen signed integer with max length of 31 bits) that identifies the Rails migration process as the owner of the lock. We multiply this salt with a CRC32 unsigned integer hash of the database name to get a signed 64 bit integer that can also be converted to a string to act as a lock key in MySQL databases. - It is important for subsequent versions of the Migrator to use the same salt, otherwise different versions of the Migrator will not see each other's locks.
* Merge pull request #22087 from yui-knk/fix_ar_changelogKasper Timm Hansen2015-10-271-17/+14
|\ | | | | [ci skip] Aline code examples in AR changelog
| * [ci skip] Aline code examples in AR changelogyui-knk2015-10-271-17/+14
| |
* | Merge pull request #22078 from arunagw/secret-key-as-an-integerSantiago Pastorino2015-10-272-0/+16
|\ \ | |/ |/| raise `ArgumentError` when `SECRET_KEY_BASE` is an integer
| * raise `ArgumentError` when `SECRET_KEY_BASE` is an integerArun Agrawal2015-10-272-0/+16
|/ | | | | | | If `SECRET_KEY_BASE` or other `secret` gets passed as other then string we need to raise `ArgumentError` to know that it's a wrong argument. Closes #22072
* Remove skipped JRuby tests that are passing on 9.0.3.0.Guo Xiang Tan2015-10-273-6/+0
|
* Revert "Merge pull request #21994 from mtodd/inherit-scopes"Rafael Mendonça França2015-10-272-3/+3
| | | | | | | This reverts commit 60c9701269f5b412849f1a507df61ba4735914d7, reversing changes made to 6a25202d9ea3b4a7c9f2d6154b97cf8ba58403db. Reason: Broken build
* Merge pull request #21994 from mtodd/inherit-scopesArthur Neves2015-10-262-3/+3
|\ | | | | | | Fix InheritanceTest#test_scope_inherited_properly implementation bugs
| * Make inherited scope test failMatt Todd2015-10-262-3/+3
|/ | | | | | | | | | | | | | This triggers the JoinDependency work to reflect on the associations and trigger an error as follows: ActiveRecord::ConfigurationError: Association named 'account' was not found on Company; perhaps you misspelled it? Fix Company.of_first_firm joins association name Should be `Company.joins(:accounts)` not `Company.joins(:account)`. Do the same for Client.of_first_firm
* [ci skip] Add doc for preloader_forschneems2015-10-261-0/+4
|
* [ci skip] Clarify doc for preloaders_for_oneschneems2015-10-261-0/+5
|
* [ci skip] Add doc to preloaders_onschneems2015-10-261-0/+1
|
* Merge pull request #19686 from tsun1215/index_errorsSean Griffin2015-10-268-4/+95
|\ | | | | | | | | | | Errors can be indexed with nested attributes Close #8638
| * Errors can be indexed with nested attributesMichael Probber2015-04-178-4/+95
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `has_many` can now take `index_errors: true` as an option. When this is enabled, errors for nested models will be returned alongside an index, as opposed to just the nested model name. This option can also be enabled (or disabled) globally through `ActiveRecord::Base.index_nested_attribute_errors` E.X. ```ruby class Guitar < ActiveRecord::Base has_many :tuning_pegs accepts_nested_attributes_for :tuning_pegs end class TuningPeg < ActiveRecord::Base belongs_to :guitar validates_numericality_of :pitch end ``` - Old style - `guitar.errors["tuning_pegs.pitch"] = ["is not a number"]` - New style (if defined globally, or set in has_many_relationship) - `guitar.errors["tuning_pegs[1].pitch"] = ["is not a number"]` [Michael Probber, Terence Sun]
* | Merge pull request #22080 from AnnaErshova/edits-config-code-textRafael França2015-10-261-2/+1
|\ \ | | | | | | Edits default `config/boot.rb` to match what's generated by Rails 4.2.
| * | Edits default `config/boot.rb` to match what's generated by Rails 4.2.AnnaErshova2015-10-261-2/+1
|/ /
* | Merge pull request #19924 from iamvery/db-tasks-exit-statusSean Griffin2015-10-266-5/+67
|\ \ | | | | | | | | | Explicitly exit with status "1" for create and drop failures
| * | Update changelog with db rake task exit status fixJay Hayes2015-10-201-0/+4
| | |
| * | Exit with non-zero status when db:drop failsJay Hayes2015-10-202-1/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * If the drop task fails for a reason other than the database not existing, processing should end. This is indicated by a non-zero exit status. * Since the backtrace is already printed to screen, we forgo printing it again by using an explicit call to `exit`. * :warning: This modifies the behavior of the db:create task slightly in that the stack trace is no longer printed by default. If the `--trace` option is used, it will print the trace _after_ the error message.
| * | Exit with non-zero status when db:create failsJay Hayes2015-10-204-3/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * If the create task fails for a reason other than the database already existing, processing should end. This is indicated by a non-zero exit status. * Since the backtrace is already printed to screen, we forgo printing it again by using an explicit call to `exit`. * :warning: This modifies the behavior of the db:create task slightly in that the stack trace is no longer printed by default. If the `--trace` option is used, it will print the trace _after_ the error message.
| * | Fix test of drop failureJay Hayes2015-10-202-5/+6
| | | | | | | | | | | | | | | | | | | | | * Previously the sqlite3 adapter could not "fail" on drop. Now an error is raised when no file exists. * Also updates purge to be resilient of drop failures. This is how purge is expected to behave.
| * | Add tests to verify exit status for create/drop failuresJay Hayes2015-10-201-0/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Running the db:create task when the database already exists isn't really an error case. That is processing may proceed in this case because the database exists as requested. So let's validate that behavior with a test. * Likewise, if the database doesn't exist when running the db:drop task processing may continue as the requested condition is already met. Thus a test.
* | | [ci skip] Fix method documentation locationschneems2015-10-261-3/+2
| | |
* | | Merge pull request #22071 from yui-knk/redefine_method_keep_visibilitySean Griffin2015-10-262-1/+32
|\ \ \ | | | | | | | | Make `Module#redefine_method` to keep method visibility
| * | | Make `Module#redefine_method` to keep method visibilityyui-knk2015-10-262-1/+32
|/ / / | | | | | | | | | | | | | | | | | | Before this commit `Module#redefine_method` always changes visibility of redefined method to `public`. This commit changes behavior of Module#redefine_method` to keep method visibility.
* | | Merge pull request #22064 from kamipo/do_not_omit_parenthesesSean Griffin2015-10-253-13/+13
|\ \ \ | | | | | | | | Do not omit parentheses [ci skip]
| * | | Do not omit parentheses [ci skip]Ryuta Kamizono2015-10-253-13/+13
| | | |
* | | | Merge pull request #22060 from sebmck/tweak-wordingClaudio B2015-10-255-16/+16
|\ \ \ \ | | | | | | | | | | Tweaked wording used in some tests.
| * | | | Tweaked wording used in some tests.Sebastian McKenzie2015-10-255-16/+16
| | | | |
* | | | | Merge pull request #22062 from y-yagi/fix_rdoc_markupYves Senn2015-10-251-4/+4
|\ \ \ \ \ | |/ / / / |/| | | | fix rdoc markup [ci skip]
| * | | | fix rdoc markup [ci skip]yuuji.yaginuma2015-10-251-4/+4
|/ / / /
* | | | Merge pull request #22040 from arunagw/remove-jruby-travis-optsYves Senn2015-10-241-2/+0
|\ \ \ \ | |/ / / |/| | | Remove JRUBY_OPTS from .travis.yml file
| * | | Remove JRUBY_OPTS from .travis.yml fileArun Agrawal2015-10-231-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | As we are not running tests for JRuby on travis this option is not needed. For more details check 0e8c04529159522aadbfe4fe71ea3d326df07d52
* | | | Merge pull request #22054 from tgxworld/jruby_issue_fixedMatthew Draper2015-10-241-4/+0
|\ \ \ \ | | | | | | | | | | Remove skip on tests that have been fixed.
| * | | | Remove skip on tests that have been fixed.Guo Xiang Tan2015-10-241-4/+0
|/ / / /
* | | | Merge pull request #22033 from jmccartie/jm/uuid_nilRafael Mendonça França2015-10-238-19/+28
|\ \ \ \ | | | | | | | | | | | | | | | Guard clause for id_kind in generator
| * | | | Stop aligning the argumentsRafael Mendonça França2015-10-231-4/+4
| | | | |
| * | | | Use thor class_option to make the primary_key_type option workRafael Mendonça França2015-10-236-16/+20
| | | | | | | | | | | | | | | | | | | | Also move the method to the right class
| * | | | Move default uuid generation to active_recordJon McCartie2015-10-235-11/+16
|/ / / /
* | | | Merge pull request #22052 from piton4eg/patch-10Arthur Nogueira Neves2015-10-231-1/+1
|\ \ \ \ | | | | | | | | | | Fix punctuation [ci skip]
| * | | | Fix punctuation [ci skip]Markov Alexey2015-10-231-1/+1
| | | | |
* | | | | Merge pull request #21990 from greysteil/invalid-utf8-querystringsKasper Timm Hansen2015-10-234-7/+37
|\ \ \ \ \ | |/ / / / |/| | | | Catch invalid UTF-8 querystring values and respond with BadRequest
| * | | | Catch invalid UTF-8 querystring values and respond with BadRequestGrey Baker2015-10-234-7/+37
|/ / / /
* | | | Merge pull request #22038 from ↵Kasper Timm Hansen2015-10-231-0/+6
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | tgxworld/fix_random_error_when_running_tests_with_jruby FIX: Randomly failing test when running without GIL.
| * | | | FIX: Randomly failing test when running without GIL.Guo Xiang Tan2015-10-231-0/+6
| | | | |
* | | | | Merge pull request #22037 from kamipo/remove_no_need_binds_emptySean Griffin2015-10-231-3/+3
|\ \ \ \ \ | | | | | | | | | | | | Remove no need `binds.empty?` checking
| * | | | | Remove no need `binds.empty?` checkingRyuta Kamizono2015-10-231-3/+3
| |/ / / / | | | | | | | | | | | | | | | | | | | | `#exec_stmt` is private method and only called in `#exec_query`. it means `binds` is provided always. No need `binds.empty?` checking.
* | | | | Merge pull request #22041 from ↵Richard Schneeman2015-10-232-1/+14
|\ \ \ \ \ | |_|/ / / |/| | | | | | | | | | | | | | y-yagi/remove_unnecessary_files_indummy_application remove unnecessary readme in dummy application
| * | | | remove unnecessary readme in dummy applicationyuuji.yaginuma2015-10-232-1/+14
| |/ / / | | | | | | | | | | | | `README` it is changed to `README.rdoc` in 6b126e2, it has been changed to` README.md` further 89a12c9.
* | | | Merge pull request #22035 from yui-knk/update_doc_anonymousYves Senn2015-10-231-2/+4
|\ \ \ \ | |/ / / |/| | | [ci skip] Add more code examples for `Module#anonymous?` docs