activerecord 5.0.7.2 → 6.1.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +829 -2015
- data/MIT-LICENSE +3 -1
- data/README.rdoc +11 -9
- data/examples/performance.rb +31 -29
- data/examples/simple.rb +5 -3
- data/lib/active_record.rb +37 -29
- data/lib/active_record/aggregations.rb +249 -247
- data/lib/active_record/association_relation.rb +30 -18
- data/lib/active_record/associations.rb +1714 -1596
- data/lib/active_record/associations/alias_tracker.rb +36 -42
- data/lib/active_record/associations/association.rb +143 -68
- data/lib/active_record/associations/association_scope.rb +98 -94
- data/lib/active_record/associations/belongs_to_association.rb +76 -46
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +13 -12
- data/lib/active_record/associations/builder/association.rb +27 -28
- data/lib/active_record/associations/builder/belongs_to.rb +52 -60
- data/lib/active_record/associations/builder/collection_association.rb +12 -22
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +40 -62
- data/lib/active_record/associations/builder/has_many.rb +10 -2
- data/lib/active_record/associations/builder/has_one.rb +35 -2
- data/lib/active_record/associations/builder/singular_association.rb +5 -1
- data/lib/active_record/associations/collection_association.rb +104 -259
- data/lib/active_record/associations/collection_proxy.rb +169 -125
- data/lib/active_record/associations/foreign_association.rb +22 -0
- data/lib/active_record/associations/has_many_association.rb +46 -31
- data/lib/active_record/associations/has_many_through_association.rb +66 -46
- data/lib/active_record/associations/has_one_association.rb +71 -52
- data/lib/active_record/associations/has_one_through_association.rb +20 -11
- data/lib/active_record/associations/join_dependency.rb +169 -180
- data/lib/active_record/associations/join_dependency/join_association.rb +53 -79
- data/lib/active_record/associations/join_dependency/join_base.rb +10 -9
- data/lib/active_record/associations/join_dependency/join_part.rb +14 -14
- data/lib/active_record/associations/preloader.rb +97 -104
- data/lib/active_record/associations/preloader/association.rb +109 -97
- data/lib/active_record/associations/preloader/through_association.rb +77 -76
- data/lib/active_record/associations/singular_association.rb +12 -45
- data/lib/active_record/associations/through_association.rb +27 -15
- data/lib/active_record/attribute_assignment.rb +55 -60
- data/lib/active_record/attribute_methods.rb +111 -141
- data/lib/active_record/attribute_methods/before_type_cast.rb +17 -9
- data/lib/active_record/attribute_methods/dirty.rb +172 -112
- data/lib/active_record/attribute_methods/primary_key.rb +88 -91
- data/lib/active_record/attribute_methods/query.rb +6 -8
- data/lib/active_record/attribute_methods/read.rb +18 -50
- data/lib/active_record/attribute_methods/serialization.rb +38 -10
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +38 -66
- data/lib/active_record/attribute_methods/write.rb +25 -32
- data/lib/active_record/attributes.rb +69 -31
- data/lib/active_record/autosave_association.rb +102 -66
- data/lib/active_record/base.rb +16 -25
- data/lib/active_record/callbacks.rb +202 -43
- data/lib/active_record/coders/json.rb +2 -0
- data/lib/active_record/coders/yaml_column.rb +11 -12
- data/lib/active_record/connection_adapters.rb +50 -0
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +661 -375
- data/lib/active_record/connection_adapters/abstract/database_limits.rb +14 -38
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +269 -105
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +54 -35
- data/lib/active_record/connection_adapters/abstract/quoting.rb +137 -93
- data/lib/active_record/connection_adapters/abstract/savepoints.rb +5 -3
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +155 -113
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +328 -162
- data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +68 -80
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +591 -259
- data/lib/active_record/connection_adapters/abstract/transaction.rb +229 -91
- data/lib/active_record/connection_adapters/abstract_adapter.rb +392 -244
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +457 -582
- data/lib/active_record/connection_adapters/column.rb +55 -13
- data/lib/active_record/connection_adapters/deduplicable.rb +29 -0
- data/lib/active_record/connection_adapters/legacy_pool_manager.rb +31 -0
- data/lib/active_record/connection_adapters/mysql/column.rb +8 -31
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +135 -49
- data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +24 -23
- data/lib/active_record/connection_adapters/mysql/quoting.rb +50 -20
- data/lib/active_record/connection_adapters/mysql/schema_creation.rb +79 -49
- data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +66 -56
- data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +70 -36
- data/lib/active_record/connection_adapters/mysql/schema_statements.rb +268 -0
- data/lib/active_record/connection_adapters/mysql/type_metadata.rb +20 -12
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +74 -37
- data/lib/active_record/connection_adapters/pool_config.rb +63 -0
- data/lib/active_record/connection_adapters/pool_manager.rb +43 -0
- data/lib/active_record/connection_adapters/postgresql/column.rb +39 -28
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +70 -101
- data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +5 -3
- data/lib/active_record/connection_adapters/postgresql/oid.rb +26 -21
- data/lib/active_record/connection_adapters/postgresql/oid/array.rb +22 -11
- data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +6 -5
- data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +2 -0
- data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +2 -0
- data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +6 -6
- data/lib/active_record/connection_adapters/postgresql/oid/date.rb +23 -0
- data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +14 -4
- data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +3 -1
- data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +5 -4
- data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +19 -18
- data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +2 -0
- data/lib/active_record/connection_adapters/postgresql/oid/interval.rb +49 -0
- data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +3 -11
- data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +44 -0
- data/lib/active_record/connection_adapters/postgresql/oid/macaddr.rb +25 -0
- data/lib/active_record/connection_adapters/postgresql/oid/money.rb +7 -5
- data/lib/active_record/connection_adapters/postgresql/oid/{json.rb → oid.rb} +6 -1
- data/lib/active_record/connection_adapters/postgresql/oid/point.rb +30 -9
- data/lib/active_record/connection_adapters/postgresql/oid/range.rb +52 -30
- data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +4 -1
- data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +58 -54
- data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +18 -4
- data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +2 -0
- data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +2 -0
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +98 -38
- data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +21 -27
- data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +80 -0
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +147 -105
- data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +34 -32
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +426 -324
- data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +32 -23
- data/lib/active_record/connection_adapters/postgresql/utils.rb +9 -6
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +418 -293
- data/lib/active_record/connection_adapters/schema_cache.rb +135 -18
- data/lib/active_record/connection_adapters/sql_type_metadata.rb +22 -7
- data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +144 -0
- data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +3 -1
- data/lib/active_record/connection_adapters/sqlite3/quoting.rb +72 -18
- data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +5 -6
- data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +19 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +18 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +170 -0
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +282 -290
- data/lib/active_record/connection_adapters/statement_pool.rb +9 -8
- data/lib/active_record/connection_handling.rb +287 -45
- data/lib/active_record/core.rb +385 -181
- data/lib/active_record/counter_cache.rb +60 -28
- data/lib/active_record/database_configurations.rb +272 -0
- data/lib/active_record/database_configurations/connection_url_resolver.rb +98 -0
- data/lib/active_record/database_configurations/database_config.rb +80 -0
- data/lib/active_record/database_configurations/hash_config.rb +96 -0
- data/lib/active_record/database_configurations/url_config.rb +53 -0
- data/lib/active_record/delegated_type.rb +209 -0
- data/lib/active_record/destroy_association_async_job.rb +36 -0
- data/lib/active_record/dynamic_matchers.rb +87 -87
- data/lib/active_record/enum.rb +122 -47
- data/lib/active_record/errors.rb +153 -22
- data/lib/active_record/explain.rb +13 -8
- data/lib/active_record/explain_registry.rb +3 -1
- data/lib/active_record/explain_subscriber.rb +9 -4
- data/lib/active_record/fixture_set/file.rb +20 -22
- data/lib/active_record/fixture_set/model_metadata.rb +32 -0
- data/lib/active_record/fixture_set/render_context.rb +17 -0
- data/lib/active_record/fixture_set/table_row.rb +152 -0
- data/lib/active_record/fixture_set/table_rows.rb +46 -0
- data/lib/active_record/fixtures.rb +246 -507
- data/lib/active_record/gem_version.rb +6 -4
- data/lib/active_record/inheritance.rb +168 -95
- data/lib/active_record/insert_all.rb +208 -0
- data/lib/active_record/integration.rb +114 -25
- data/lib/active_record/internal_metadata.rb +30 -24
- data/lib/active_record/legacy_yaml_adapter.rb +11 -5
- data/lib/active_record/locking/optimistic.rb +81 -85
- data/lib/active_record/locking/pessimistic.rb +22 -6
- data/lib/active_record/log_subscriber.rb +68 -31
- data/lib/active_record/middleware/database_selector.rb +77 -0
- data/lib/active_record/middleware/database_selector/resolver.rb +92 -0
- data/lib/active_record/middleware/database_selector/resolver/session.rb +48 -0
- data/lib/active_record/migration.rb +439 -342
- data/lib/active_record/migration/command_recorder.rb +152 -98
- data/lib/active_record/migration/compatibility.rb +229 -60
- data/lib/active_record/migration/join_table.rb +8 -7
- data/lib/active_record/model_schema.rb +230 -122
- data/lib/active_record/nested_attributes.rb +213 -203
- data/lib/active_record/no_touching.rb +11 -2
- data/lib/active_record/null_relation.rb +12 -34
- data/lib/active_record/persistence.rb +471 -97
- data/lib/active_record/query_cache.rb +23 -12
- data/lib/active_record/querying.rb +43 -25
- data/lib/active_record/railtie.rb +155 -43
- data/lib/active_record/railties/console_sandbox.rb +2 -0
- data/lib/active_record/railties/controller_runtime.rb +34 -33
- data/lib/active_record/railties/databases.rake +507 -195
- data/lib/active_record/readonly_attributes.rb +9 -4
- data/lib/active_record/reflection.rb +245 -269
- data/lib/active_record/relation.rb +475 -324
- data/lib/active_record/relation/batches.rb +125 -72
- data/lib/active_record/relation/batches/batch_enumerator.rb +28 -10
- data/lib/active_record/relation/calculations.rb +267 -171
- data/lib/active_record/relation/delegation.rb +73 -69
- data/lib/active_record/relation/finder_methods.rb +238 -248
- data/lib/active_record/relation/from_clause.rb +7 -9
- data/lib/active_record/relation/merger.rb +95 -77
- data/lib/active_record/relation/predicate_builder.rb +109 -110
- data/lib/active_record/relation/predicate_builder/array_handler.rb +22 -17
- data/lib/active_record/relation/predicate_builder/association_query_value.rb +42 -0
- data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +6 -4
- data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +55 -0
- data/lib/active_record/relation/predicate_builder/range_handler.rb +7 -18
- data/lib/active_record/relation/predicate_builder/relation_handler.rb +7 -1
- data/lib/active_record/relation/query_attribute.rb +33 -2
- data/lib/active_record/relation/query_methods.rb +654 -374
- data/lib/active_record/relation/record_fetch_warning.rb +8 -6
- data/lib/active_record/relation/spawn_methods.rb +15 -14
- data/lib/active_record/relation/where_clause.rb +171 -109
- data/lib/active_record/result.rb +88 -51
- data/lib/active_record/runtime_registry.rb +5 -3
- data/lib/active_record/sanitization.rb +73 -100
- data/lib/active_record/schema.rb +7 -14
- data/lib/active_record/schema_dumper.rb +101 -69
- data/lib/active_record/schema_migration.rb +16 -12
- data/lib/active_record/scoping.rb +20 -20
- data/lib/active_record/scoping/default.rb +92 -95
- data/lib/active_record/scoping/named.rb +39 -30
- data/lib/active_record/secure_token.rb +19 -9
- data/lib/active_record/serialization.rb +7 -3
- data/lib/active_record/signed_id.rb +116 -0
- data/lib/active_record/statement_cache.rb +80 -29
- data/lib/active_record/store.rb +122 -42
- data/lib/active_record/suppressor.rb +6 -3
- data/lib/active_record/table_metadata.rb +51 -39
- data/lib/active_record/tasks/database_tasks.rb +332 -115
- data/lib/active_record/tasks/mysql_database_tasks.rb +66 -104
- data/lib/active_record/tasks/postgresql_database_tasks.rb +84 -56
- data/lib/active_record/tasks/sqlite_database_tasks.rb +40 -19
- data/lib/active_record/test_databases.rb +24 -0
- data/lib/active_record/test_fixtures.rb +246 -0
- data/lib/active_record/timestamp.rb +70 -38
- data/lib/active_record/touch_later.rb +26 -24
- data/lib/active_record/transactions.rb +121 -184
- data/lib/active_record/translation.rb +3 -1
- data/lib/active_record/type.rb +29 -17
- data/lib/active_record/type/adapter_specific_registry.rb +44 -48
- data/lib/active_record/type/date.rb +2 -0
- data/lib/active_record/type/date_time.rb +2 -0
- data/lib/active_record/type/decimal_without_scale.rb +15 -0
- data/lib/active_record/type/hash_lookup_type_map.rb +5 -4
- data/lib/active_record/type/internal/timezone.rb +2 -0
- data/lib/active_record/type/json.rb +30 -0
- data/lib/active_record/type/serialized.rb +20 -9
- data/lib/active_record/type/text.rb +11 -0
- data/lib/active_record/type/time.rb +12 -1
- data/lib/active_record/type/type_map.rb +14 -17
- data/lib/active_record/type/unsigned_integer.rb +16 -0
- data/lib/active_record/type_caster.rb +4 -2
- data/lib/active_record/type_caster/connection.rb +17 -13
- data/lib/active_record/type_caster/map.rb +10 -6
- data/lib/active_record/validations.rb +8 -5
- data/lib/active_record/validations/absence.rb +2 -0
- data/lib/active_record/validations/associated.rb +4 -3
- data/lib/active_record/validations/length.rb +2 -0
- data/lib/active_record/validations/numericality.rb +35 -0
- data/lib/active_record/validations/presence.rb +4 -2
- data/lib/active_record/validations/uniqueness.rb +52 -45
- data/lib/active_record/version.rb +3 -1
- data/lib/arel.rb +54 -0
- data/lib/arel/alias_predication.rb +9 -0
- data/lib/arel/attributes/attribute.rb +41 -0
- data/lib/arel/collectors/bind.rb +29 -0
- data/lib/arel/collectors/composite.rb +39 -0
- data/lib/arel/collectors/plain_string.rb +20 -0
- data/lib/arel/collectors/sql_string.rb +27 -0
- data/lib/arel/collectors/substitute_binds.rb +35 -0
- data/lib/arel/crud.rb +42 -0
- data/lib/arel/delete_manager.rb +18 -0
- data/lib/arel/errors.rb +9 -0
- data/lib/arel/expressions.rb +29 -0
- data/lib/arel/factory_methods.rb +49 -0
- data/lib/arel/insert_manager.rb +49 -0
- data/lib/arel/math.rb +45 -0
- data/lib/arel/nodes.rb +70 -0
- data/lib/arel/nodes/and.rb +32 -0
- data/lib/arel/nodes/ascending.rb +23 -0
- data/lib/arel/nodes/binary.rb +126 -0
- data/lib/arel/nodes/bind_param.rb +44 -0
- data/lib/arel/nodes/case.rb +55 -0
- data/lib/arel/nodes/casted.rb +62 -0
- data/lib/arel/nodes/comment.rb +29 -0
- data/lib/arel/nodes/count.rb +12 -0
- data/lib/arel/nodes/delete_statement.rb +45 -0
- data/lib/arel/nodes/descending.rb +23 -0
- data/lib/arel/nodes/equality.rb +15 -0
- data/lib/arel/nodes/extract.rb +24 -0
- data/lib/arel/nodes/false.rb +16 -0
- data/lib/arel/nodes/full_outer_join.rb +8 -0
- data/lib/arel/nodes/function.rb +44 -0
- data/lib/arel/nodes/grouping.rb +11 -0
- data/lib/arel/nodes/homogeneous_in.rb +72 -0
- data/lib/arel/nodes/in.rb +15 -0
- data/lib/arel/nodes/infix_operation.rb +92 -0
- data/lib/arel/nodes/inner_join.rb +8 -0
- data/lib/arel/nodes/insert_statement.rb +37 -0
- data/lib/arel/nodes/join_source.rb +20 -0
- data/lib/arel/nodes/matches.rb +18 -0
- data/lib/arel/nodes/named_function.rb +23 -0
- data/lib/arel/nodes/node.rb +51 -0
- data/lib/arel/nodes/node_expression.rb +13 -0
- data/lib/arel/nodes/ordering.rb +27 -0
- data/lib/arel/nodes/outer_join.rb +8 -0
- data/lib/arel/nodes/over.rb +15 -0
- data/lib/arel/nodes/regexp.rb +16 -0
- data/lib/arel/nodes/right_outer_join.rb +8 -0
- data/lib/arel/nodes/select_core.rb +67 -0
- data/lib/arel/nodes/select_statement.rb +41 -0
- data/lib/arel/nodes/sql_literal.rb +19 -0
- data/lib/arel/nodes/string_join.rb +11 -0
- data/lib/arel/nodes/table_alias.rb +31 -0
- data/lib/arel/nodes/terminal.rb +16 -0
- data/lib/arel/nodes/true.rb +16 -0
- data/lib/arel/nodes/unary.rb +44 -0
- data/lib/arel/nodes/unary_operation.rb +20 -0
- data/lib/arel/nodes/unqualified_column.rb +22 -0
- data/lib/arel/nodes/update_statement.rb +41 -0
- data/lib/arel/nodes/values_list.rb +9 -0
- data/lib/arel/nodes/window.rb +126 -0
- data/lib/arel/nodes/with.rb +11 -0
- data/lib/arel/order_predications.rb +13 -0
- data/lib/arel/predications.rb +250 -0
- data/lib/arel/select_manager.rb +270 -0
- data/lib/arel/table.rb +118 -0
- data/lib/arel/tree_manager.rb +72 -0
- data/lib/arel/update_manager.rb +34 -0
- data/lib/arel/visitors.rb +13 -0
- data/lib/arel/visitors/dot.rb +308 -0
- data/lib/arel/visitors/mysql.rb +93 -0
- data/lib/arel/visitors/postgresql.rb +120 -0
- data/lib/arel/visitors/sqlite.rb +38 -0
- data/lib/arel/visitors/to_sql.rb +899 -0
- data/lib/arel/visitors/visitor.rb +45 -0
- data/lib/arel/window_predications.rb +9 -0
- data/lib/rails/generators/active_record.rb +7 -5
- data/lib/rails/generators/active_record/application_record/application_record_generator.rb +26 -0
- data/lib/rails/generators/active_record/{model/templates/application_record.rb → application_record/templates/application_record.rb.tt} +0 -0
- data/lib/rails/generators/active_record/migration.rb +22 -3
- data/lib/rails/generators/active_record/migration/migration_generator.rb +38 -35
- data/lib/rails/generators/active_record/migration/templates/{create_table_migration.rb → create_table_migration.rb.tt} +3 -1
- data/lib/rails/generators/active_record/migration/templates/{migration.rb → migration.rb.tt} +7 -5
- data/lib/rails/generators/active_record/model/model_generator.rb +41 -25
- data/lib/rails/generators/active_record/model/templates/abstract_base_class.rb.tt +7 -0
- data/lib/rails/generators/active_record/model/templates/{model.rb → model.rb.tt} +10 -1
- data/lib/rails/generators/active_record/model/templates/{module.rb → module.rb.tt} +0 -0
- metadata +141 -57
- data/lib/active_record/associations/preloader/belongs_to.rb +0 -17
- data/lib/active_record/associations/preloader/collection_association.rb +0 -17
- data/lib/active_record/associations/preloader/has_many.rb +0 -17
- data/lib/active_record/associations/preloader/has_many_through.rb +0 -19
- data/lib/active_record/associations/preloader/has_one.rb +0 -15
- data/lib/active_record/associations/preloader/has_one_through.rb +0 -9
- data/lib/active_record/associations/preloader/singular_association.rb +0 -20
- data/lib/active_record/attribute.rb +0 -213
- data/lib/active_record/attribute/user_provided_default.rb +0 -28
- data/lib/active_record/attribute_decorators.rb +0 -67
- data/lib/active_record/attribute_mutation_tracker.rb +0 -70
- data/lib/active_record/attribute_set.rb +0 -110
- data/lib/active_record/attribute_set/builder.rb +0 -132
- data/lib/active_record/collection_cache_key.rb +0 -50
- data/lib/active_record/connection_adapters/connection_specification.rb +0 -263
- data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +0 -22
- data/lib/active_record/connection_adapters/postgresql/oid/rails_5_1_point.rb +0 -50
- data/lib/active_record/railties/jdbcmysql_error.rb +0 -16
- data/lib/active_record/relation/predicate_builder/association_query_handler.rb +0 -88
- data/lib/active_record/relation/predicate_builder/base_handler.rb +0 -17
- data/lib/active_record/relation/predicate_builder/class_handler.rb +0 -27
- data/lib/active_record/relation/predicate_builder/polymorphic_array_handler.rb +0 -57
- data/lib/active_record/relation/where_clause_factory.rb +0 -38
- data/lib/active_record/type/internal/abstract_json.rb +0 -33
@@ -1,50 +1,51 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support/core_ext/module/attr_internal"
|
4
|
+
require "active_record/log_subscriber"
|
3
5
|
|
4
6
|
module ActiveRecord
|
5
7
|
module Railties # :nodoc:
|
6
8
|
module ControllerRuntime #:nodoc:
|
7
9
|
extend ActiveSupport::Concern
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
# because of queries in middleware or in cases we are streaming
|
16
|
-
# and it won't be cleaned up by the method below.
|
17
|
-
ActiveRecord::LogSubscriber.reset_runtime
|
18
|
-
super
|
11
|
+
module ClassMethods # :nodoc:
|
12
|
+
def log_process_action(payload)
|
13
|
+
messages, db_runtime = super, payload[:db_runtime]
|
14
|
+
messages << ("ActiveRecord: %.1fms" % db_runtime.to_f) if db_runtime
|
15
|
+
messages
|
16
|
+
end
|
19
17
|
end
|
20
18
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
runtime
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
else
|
19
|
+
private
|
20
|
+
attr_internal :db_runtime
|
21
|
+
|
22
|
+
def process_action(action, *args)
|
23
|
+
# We also need to reset the runtime before each action
|
24
|
+
# because of queries in middleware or in cases we are streaming
|
25
|
+
# and it won't be cleaned up by the method below.
|
26
|
+
ActiveRecord::LogSubscriber.reset_runtime
|
30
27
|
super
|
31
28
|
end
|
32
|
-
end
|
33
29
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
30
|
+
def cleanup_view_runtime
|
31
|
+
if logger && logger.info? && ActiveRecord::Base.connected?
|
32
|
+
db_rt_before_render = ActiveRecord::LogSubscriber.reset_runtime
|
33
|
+
self.db_runtime = (db_runtime || 0) + db_rt_before_render
|
34
|
+
runtime = super
|
35
|
+
db_rt_after_render = ActiveRecord::LogSubscriber.reset_runtime
|
36
|
+
self.db_runtime += db_rt_after_render
|
37
|
+
runtime - db_rt_after_render
|
38
|
+
else
|
39
|
+
super
|
40
|
+
end
|
38
41
|
end
|
39
|
-
end
|
40
42
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
def append_info_to_payload(payload)
|
44
|
+
super
|
45
|
+
if ActiveRecord::Base.connected?
|
46
|
+
payload[:db_runtime] = (db_runtime || 0) + ActiveRecord::LogSubscriber.reset_runtime
|
47
|
+
end
|
46
48
|
end
|
47
|
-
end
|
48
49
|
end
|
49
50
|
end
|
50
51
|
end
|
@@ -1,40 +1,66 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_record"
|
4
|
+
require "active_support/configuration_file"
|
5
|
+
require "active_support/deprecation"
|
6
|
+
|
7
|
+
databases = ActiveRecord::Tasks::DatabaseTasks.setup_initial_database_yaml
|
2
8
|
|
3
9
|
db_namespace = namespace :db do
|
4
10
|
desc "Set the environment value for the database"
|
5
|
-
task "environment:set" =>
|
11
|
+
task "environment:set" => :load_config do
|
12
|
+
raise ActiveRecord::EnvironmentStorageError unless ActiveRecord::InternalMetadata.enabled?
|
6
13
|
ActiveRecord::InternalMetadata.create_table
|
7
|
-
ActiveRecord::InternalMetadata[:environment] = ActiveRecord::
|
14
|
+
ActiveRecord::InternalMetadata[:environment] = ActiveRecord::Base.connection.migration_context.current_environment
|
8
15
|
end
|
9
16
|
|
10
|
-
task
|
17
|
+
task check_protected_environments: :load_config do
|
11
18
|
ActiveRecord::Tasks::DatabaseTasks.check_protected_environments!
|
12
19
|
end
|
13
20
|
|
14
|
-
task :
|
15
|
-
ActiveRecord::Base.configurations
|
21
|
+
task load_config: :environment do
|
22
|
+
if ActiveRecord::Base.configurations.empty?
|
23
|
+
ActiveRecord::Base.configurations = ActiveRecord::Tasks::DatabaseTasks.database_configuration
|
24
|
+
end
|
25
|
+
|
16
26
|
ActiveRecord::Migrator.migrations_paths = ActiveRecord::Tasks::DatabaseTasks.migrations_paths
|
17
27
|
end
|
18
28
|
|
19
29
|
namespace :create do
|
20
|
-
task :
|
30
|
+
task all: :load_config do
|
21
31
|
ActiveRecord::Tasks::DatabaseTasks.create_all
|
22
32
|
end
|
33
|
+
|
34
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
35
|
+
desc "Create #{name} database for current environment"
|
36
|
+
task name => :load_config do
|
37
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
|
38
|
+
ActiveRecord::Tasks::DatabaseTasks.create(db_config)
|
39
|
+
end
|
40
|
+
end
|
23
41
|
end
|
24
42
|
|
25
|
-
desc
|
26
|
-
task :
|
43
|
+
desc "Creates the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:create:all to create all databases in the config). Without RAILS_ENV or when RAILS_ENV is development, it defaults to creating the development and test databases, except when DATABASE_URL is present."
|
44
|
+
task create: [:load_config] do
|
27
45
|
ActiveRecord::Tasks::DatabaseTasks.create_current
|
28
46
|
end
|
29
47
|
|
30
48
|
namespace :drop do
|
31
|
-
task :
|
49
|
+
task all: [:load_config, :check_protected_environments] do
|
32
50
|
ActiveRecord::Tasks::DatabaseTasks.drop_all
|
33
51
|
end
|
52
|
+
|
53
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
54
|
+
desc "Drop #{name} database for current environment"
|
55
|
+
task name => [:load_config, :check_protected_environments] do
|
56
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
|
57
|
+
ActiveRecord::Tasks::DatabaseTasks.drop(db_config)
|
58
|
+
end
|
59
|
+
end
|
34
60
|
end
|
35
61
|
|
36
|
-
desc
|
37
|
-
task :
|
62
|
+
desc "Drops the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_ENV or when RAILS_ENV is development, it defaults to dropping the development and test databases, except when DATABASE_URL is present."
|
63
|
+
task drop: [:load_config, :check_protected_environments] do
|
38
64
|
db_namespace["drop:_unsafe"].invoke
|
39
65
|
end
|
40
66
|
|
@@ -43,183 +69,370 @@ db_namespace = namespace :db do
|
|
43
69
|
end
|
44
70
|
|
45
71
|
namespace :purge do
|
46
|
-
task :
|
72
|
+
task all: [:load_config, :check_protected_environments] do
|
47
73
|
ActiveRecord::Tasks::DatabaseTasks.purge_all
|
48
74
|
end
|
49
75
|
end
|
50
76
|
|
51
|
-
# desc "
|
52
|
-
task :
|
77
|
+
# desc "Truncates tables of each database for current environment"
|
78
|
+
task truncate_all: [:load_config, :check_protected_environments] do
|
79
|
+
ActiveRecord::Tasks::DatabaseTasks.truncate_all
|
80
|
+
end
|
81
|
+
|
82
|
+
# desc "Empty the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:purge:all to purge all databases in the config). Without RAILS_ENV it defaults to purging the development and test databases, except when DATABASE_URL is present."
|
83
|
+
task purge: [:load_config, :check_protected_environments] do
|
53
84
|
ActiveRecord::Tasks::DatabaseTasks.purge_current
|
54
85
|
end
|
55
86
|
|
56
87
|
desc "Migrate the database (options: VERSION=x, VERBOSE=false, SCOPE=blog)."
|
57
|
-
task
|
58
|
-
ActiveRecord::
|
59
|
-
|
88
|
+
task migrate: :load_config do
|
89
|
+
original_db_config = ActiveRecord::Base.connection_db_config
|
90
|
+
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
91
|
+
ActiveRecord::Base.establish_connection(db_config)
|
92
|
+
ActiveRecord::Tasks::DatabaseTasks.migrate
|
93
|
+
end
|
94
|
+
db_namespace["_dump"].invoke
|
95
|
+
ensure
|
96
|
+
ActiveRecord::Base.establish_connection(original_db_config)
|
60
97
|
end
|
61
98
|
|
62
99
|
# IMPORTANT: This task won't dump the schema if ActiveRecord::Base.dump_schema_after_migration is set to false
|
63
100
|
task :_dump do
|
64
101
|
if ActiveRecord::Base.dump_schema_after_migration
|
65
|
-
|
66
|
-
when :ruby then db_namespace["schema:dump"].invoke
|
67
|
-
when :sql then db_namespace["structure:dump"].invoke
|
68
|
-
else
|
69
|
-
raise "unknown schema format #{ActiveRecord::Base.schema_format}"
|
70
|
-
end
|
102
|
+
db_namespace["schema:dump"].invoke
|
71
103
|
end
|
72
104
|
# Allow this task to be called as many times as required. An example is the
|
73
105
|
# migrate:redo task, which calls other two internally that depend on this one.
|
74
|
-
db_namespace[
|
106
|
+
db_namespace["_dump"].reenable
|
107
|
+
end
|
108
|
+
|
109
|
+
namespace :_dump do
|
110
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
111
|
+
# IMPORTANT: This task won't dump the schema if ActiveRecord::Base.dump_schema_after_migration is set to false
|
112
|
+
task name do
|
113
|
+
if ActiveRecord::Base.dump_schema_after_migration
|
114
|
+
db_namespace["schema:dump:#{name}"].invoke
|
115
|
+
end
|
116
|
+
# Allow this task to be called as many times as required. An example is the
|
117
|
+
# migrate:redo task, which calls other two internally that depend on this one.
|
118
|
+
db_namespace["_dump:#{name}"].reenable
|
119
|
+
end
|
120
|
+
end
|
75
121
|
end
|
76
122
|
|
77
123
|
namespace :migrate do
|
78
|
-
|
79
|
-
|
124
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
125
|
+
desc "Migrate #{name} database for current environment"
|
126
|
+
task name => :load_config do
|
127
|
+
original_db_config = ActiveRecord::Base.connection_db_config
|
128
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
|
129
|
+
ActiveRecord::Base.establish_connection(db_config)
|
130
|
+
ActiveRecord::Tasks::DatabaseTasks.migrate
|
131
|
+
db_namespace["_dump:#{name}"].invoke
|
132
|
+
ensure
|
133
|
+
ActiveRecord::Base.establish_connection(original_db_config)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
desc "Rolls back the database one migration and re-migrates up (options: STEP=x, VERSION=x)."
|
138
|
+
task redo: :load_config do
|
139
|
+
ActiveRecord::Tasks::DatabaseTasks.raise_for_multi_db(command: "db:migrate:redo")
|
140
|
+
|
80
141
|
raise "Empty VERSION provided" if ENV["VERSION"] && ENV["VERSION"].empty?
|
81
142
|
|
82
|
-
if ENV[
|
83
|
-
db_namespace[
|
84
|
-
db_namespace[
|
143
|
+
if ENV["VERSION"]
|
144
|
+
db_namespace["migrate:down"].invoke
|
145
|
+
db_namespace["migrate:up"].invoke
|
85
146
|
else
|
86
|
-
db_namespace[
|
87
|
-
db_namespace[
|
147
|
+
db_namespace["rollback"].invoke
|
148
|
+
db_namespace["migrate"].invoke
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
namespace :redo do
|
153
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
154
|
+
desc "Rolls back #{name} database one migration and re-migrates up (options: STEP=x, VERSION=x)."
|
155
|
+
task name => :load_config do
|
156
|
+
raise "Empty VERSION provided" if ENV["VERSION"] && ENV["VERSION"].empty?
|
157
|
+
|
158
|
+
if ENV["VERSION"]
|
159
|
+
db_namespace["migrate:down:#{name}"].invoke
|
160
|
+
db_namespace["migrate:up:#{name}"].invoke
|
161
|
+
else
|
162
|
+
db_namespace["rollback:#{name}"].invoke
|
163
|
+
db_namespace["migrate:#{name}"].invoke
|
164
|
+
end
|
165
|
+
end
|
88
166
|
end
|
89
167
|
end
|
90
168
|
|
91
169
|
# desc 'Resets your database using your migrations for the current environment'
|
92
|
-
task :
|
170
|
+
task reset: ["db:drop", "db:create", "db:migrate"]
|
171
|
+
|
172
|
+
desc 'Runs the "up" for a given migration VERSION.'
|
173
|
+
task up: :load_config do
|
174
|
+
ActiveRecord::Tasks::DatabaseTasks.raise_for_multi_db(command: "db:migrate:up")
|
93
175
|
|
94
|
-
# desc 'Runs the "up" for a given migration VERSION.'
|
95
|
-
task :up => [:environment, :load_config] do
|
96
176
|
raise "VERSION is required" if !ENV["VERSION"] || ENV["VERSION"].empty?
|
97
177
|
|
98
|
-
|
99
|
-
|
100
|
-
|
178
|
+
ActiveRecord::Tasks::DatabaseTasks.check_target_version
|
179
|
+
|
180
|
+
ActiveRecord::Base.connection.migration_context.run(
|
181
|
+
:up,
|
182
|
+
ActiveRecord::Tasks::DatabaseTasks.target_version
|
183
|
+
)
|
184
|
+
db_namespace["_dump"].invoke
|
101
185
|
end
|
102
186
|
|
103
|
-
|
104
|
-
|
187
|
+
namespace :up do
|
188
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
189
|
+
task name => :load_config do
|
190
|
+
raise "VERSION is required" if !ENV["VERSION"] || ENV["VERSION"].empty?
|
191
|
+
|
192
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
|
193
|
+
|
194
|
+
ActiveRecord::Base.establish_connection(db_config)
|
195
|
+
ActiveRecord::Tasks::DatabaseTasks.check_target_version
|
196
|
+
ActiveRecord::Base.connection.migration_context.run(
|
197
|
+
:up,
|
198
|
+
ActiveRecord::Tasks::DatabaseTasks.target_version
|
199
|
+
)
|
200
|
+
|
201
|
+
db_namespace["_dump"].invoke
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
desc 'Runs the "down" for a given migration VERSION.'
|
207
|
+
task down: :load_config do
|
208
|
+
ActiveRecord::Tasks::DatabaseTasks.raise_for_multi_db(command: "db:migrate:down")
|
209
|
+
|
105
210
|
raise "VERSION is required - To go down one migration, use db:rollback" if !ENV["VERSION"] || ENV["VERSION"].empty?
|
106
|
-
|
107
|
-
ActiveRecord::
|
108
|
-
|
211
|
+
|
212
|
+
ActiveRecord::Tasks::DatabaseTasks.check_target_version
|
213
|
+
|
214
|
+
ActiveRecord::Base.connection.migration_context.run(
|
215
|
+
:down,
|
216
|
+
ActiveRecord::Tasks::DatabaseTasks.target_version
|
217
|
+
)
|
218
|
+
db_namespace["_dump"].invoke
|
219
|
+
end
|
220
|
+
|
221
|
+
namespace :down do
|
222
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
223
|
+
task name => :load_config do
|
224
|
+
raise "VERSION is required" if !ENV["VERSION"] || ENV["VERSION"].empty?
|
225
|
+
|
226
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
|
227
|
+
|
228
|
+
ActiveRecord::Base.establish_connection(db_config)
|
229
|
+
ActiveRecord::Tasks::DatabaseTasks.check_target_version
|
230
|
+
ActiveRecord::Base.connection.migration_context.run(
|
231
|
+
:down,
|
232
|
+
ActiveRecord::Tasks::DatabaseTasks.target_version
|
233
|
+
)
|
234
|
+
|
235
|
+
db_namespace["_dump"].invoke
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
desc "Display status of migrations"
|
241
|
+
task status: :load_config do
|
242
|
+
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
243
|
+
ActiveRecord::Base.establish_connection(db_config)
|
244
|
+
ActiveRecord::Tasks::DatabaseTasks.migrate_status
|
245
|
+
end
|
109
246
|
end
|
110
247
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
248
|
+
namespace :status do
|
249
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
250
|
+
desc "Display status of migrations for #{name} database"
|
251
|
+
task name => :load_config do
|
252
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
|
253
|
+
ActiveRecord::Base.establish_connection(db_config)
|
254
|
+
ActiveRecord::Tasks::DatabaseTasks.migrate_status
|
255
|
+
end
|
115
256
|
end
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
namespace :rollback do
|
261
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
262
|
+
desc "Rollback #{name} database for current environment (specify steps w/ STEP=n)."
|
263
|
+
task name => :load_config do
|
264
|
+
step = ENV["STEP"] ? ENV["STEP"].to_i : 1
|
265
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
|
266
|
+
|
267
|
+
ActiveRecord::Base.establish_connection(db_config)
|
268
|
+
ActiveRecord::Base.connection.migration_context.rollback(step)
|
116
269
|
|
117
|
-
|
118
|
-
puts "\ndatabase: #{ActiveRecord::Base.connection_config[:database]}\n\n"
|
119
|
-
puts "#{'Status'.center(8)} #{'Migration ID'.ljust(14)} Migration Name"
|
120
|
-
puts "-" * 50
|
121
|
-
paths = ActiveRecord::Tasks::DatabaseTasks.migrations_paths
|
122
|
-
ActiveRecord::Migrator.migrations_status(paths).each do |status, version, name|
|
123
|
-
puts "#{status.center(8)} #{version.ljust(14)} #{name}"
|
270
|
+
db_namespace["_dump"].invoke
|
124
271
|
end
|
125
|
-
puts
|
126
272
|
end
|
127
273
|
end
|
128
274
|
|
129
|
-
desc
|
130
|
-
task
|
131
|
-
|
132
|
-
|
133
|
-
|
275
|
+
desc "Rolls the schema back to the previous version (specify steps w/ STEP=n)."
|
276
|
+
task rollback: :load_config do
|
277
|
+
ActiveRecord::Tasks::DatabaseTasks.raise_for_multi_db(command: "db:rollback")
|
278
|
+
|
279
|
+
step = ENV["STEP"] ? ENV["STEP"].to_i : 1
|
280
|
+
|
281
|
+
ActiveRecord::Base.connection.migration_context.rollback(step)
|
282
|
+
|
283
|
+
db_namespace["_dump"].invoke
|
134
284
|
end
|
135
285
|
|
136
286
|
# desc 'Pushes the schema to the next version (specify steps w/ STEP=n).'
|
137
|
-
task
|
138
|
-
step = ENV[
|
139
|
-
ActiveRecord::
|
140
|
-
db_namespace[
|
287
|
+
task forward: :load_config do
|
288
|
+
step = ENV["STEP"] ? ENV["STEP"].to_i : 1
|
289
|
+
ActiveRecord::Base.connection.migration_context.forward(step)
|
290
|
+
db_namespace["_dump"].invoke
|
141
291
|
end
|
142
292
|
|
143
|
-
|
144
|
-
task :
|
293
|
+
desc "Drops and recreates the database from db/schema.rb for the current environment and loads the seeds."
|
294
|
+
task reset: [ "db:drop", "db:setup" ]
|
145
295
|
|
146
296
|
# desc "Retrieves the charset for the current environment's database"
|
147
|
-
task
|
297
|
+
task charset: :load_config do
|
148
298
|
puts ActiveRecord::Tasks::DatabaseTasks.charset_current
|
149
299
|
end
|
150
300
|
|
151
301
|
# desc "Retrieves the collation for the current environment's database"
|
152
|
-
task
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
$stderr.puts 'Sorry, your database adapter is not supported yet. Feel free to submit a patch.'
|
157
|
-
end
|
302
|
+
task collation: :load_config do
|
303
|
+
puts ActiveRecord::Tasks::DatabaseTasks.collation_current
|
304
|
+
rescue NoMethodError
|
305
|
+
$stderr.puts "Sorry, your database adapter is not supported yet. Feel free to submit a patch."
|
158
306
|
end
|
159
307
|
|
160
|
-
desc
|
161
|
-
task
|
162
|
-
puts "Current version: #{ActiveRecord::
|
308
|
+
desc "Retrieves the current schema version number"
|
309
|
+
task version: :load_config do
|
310
|
+
puts "Current version: #{ActiveRecord::Base.connection.migration_context.current_version}"
|
163
311
|
end
|
164
312
|
|
165
313
|
# desc "Raises an error if there are pending migrations"
|
166
|
-
task
|
167
|
-
pending_migrations = ActiveRecord::
|
314
|
+
task abort_if_pending_migrations: :load_config do
|
315
|
+
pending_migrations = ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).flat_map do |db_config|
|
316
|
+
ActiveRecord::Base.establish_connection(db_config)
|
317
|
+
|
318
|
+
ActiveRecord::Base.connection.migration_context.open.pending_migrations
|
319
|
+
end
|
168
320
|
|
169
321
|
if pending_migrations.any?
|
170
322
|
puts "You have #{pending_migrations.size} pending #{pending_migrations.size > 1 ? 'migrations:' : 'migration:'}"
|
171
323
|
pending_migrations.each do |pending_migration|
|
172
|
-
puts
|
324
|
+
puts " %4d %s" % [pending_migration.version, pending_migration.name]
|
325
|
+
end
|
326
|
+
abort %{Run `bin/rails db:migrate` to update your database then try again.}
|
327
|
+
end
|
328
|
+
ensure
|
329
|
+
ActiveRecord::Base.establish_connection(ActiveRecord::Tasks::DatabaseTasks.env.to_sym)
|
330
|
+
end
|
331
|
+
|
332
|
+
namespace :abort_if_pending_migrations do
|
333
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
334
|
+
# desc "Raises an error if there are pending migrations for #{name} database"
|
335
|
+
task name => :load_config do
|
336
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
|
337
|
+
ActiveRecord::Base.establish_connection(db_config)
|
338
|
+
|
339
|
+
pending_migrations = ActiveRecord::Base.connection.migration_context.open.pending_migrations
|
340
|
+
|
341
|
+
if pending_migrations.any?
|
342
|
+
puts "You have #{pending_migrations.size} pending #{pending_migrations.size > 1 ? 'migrations:' : 'migration:'}"
|
343
|
+
pending_migrations.each do |pending_migration|
|
344
|
+
puts " %4d %s" % [pending_migration.version, pending_migration.name]
|
345
|
+
end
|
346
|
+
abort %{Run `bin/rails db:migrate:#{name}` to update your database then try again.}
|
347
|
+
end
|
173
348
|
end
|
174
|
-
abort %{Run `rails db:migrate` to update your database then try again.}
|
175
349
|
end
|
176
350
|
end
|
177
351
|
|
178
|
-
desc
|
179
|
-
task :
|
352
|
+
desc "Creates the database, loads the schema, and initializes with the seed data (use db:reset to also drop the database first)"
|
353
|
+
task setup: ["db:create", :environment, "db:schema:load", :seed]
|
354
|
+
|
355
|
+
desc "Runs setup if database does not exist, or runs migrations if it does"
|
356
|
+
task prepare: :load_config do
|
357
|
+
seed = false
|
358
|
+
|
359
|
+
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
360
|
+
ActiveRecord::Base.establish_connection(db_config)
|
361
|
+
|
362
|
+
# Skipped when no database
|
363
|
+
ActiveRecord::Tasks::DatabaseTasks.migrate
|
364
|
+
|
365
|
+
if ActiveRecord::Base.dump_schema_after_migration
|
366
|
+
ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config, ActiveRecord::Base.schema_format)
|
367
|
+
end
|
368
|
+
rescue ActiveRecord::NoDatabaseError
|
369
|
+
config_name = db_config.name
|
370
|
+
ActiveRecord::Tasks::DatabaseTasks.create_current(db_config.env_name, config_name)
|
371
|
+
|
372
|
+
if File.exist?(ActiveRecord::Tasks::DatabaseTasks.dump_filename(config_name))
|
373
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema(
|
374
|
+
db_config,
|
375
|
+
ActiveRecord::Base.schema_format,
|
376
|
+
nil
|
377
|
+
)
|
378
|
+
else
|
379
|
+
ActiveRecord::Tasks::DatabaseTasks.migrate
|
380
|
+
end
|
381
|
+
|
382
|
+
seed = true
|
383
|
+
end
|
180
384
|
|
181
|
-
|
182
|
-
|
183
|
-
|
385
|
+
ActiveRecord::Base.establish_connection
|
386
|
+
ActiveRecord::Tasks::DatabaseTasks.load_seed if seed
|
387
|
+
end
|
388
|
+
|
389
|
+
desc "Loads the seed data from db/seeds.rb"
|
390
|
+
task seed: :load_config do
|
391
|
+
db_namespace["abort_if_pending_migrations"].invoke
|
184
392
|
ActiveRecord::Tasks::DatabaseTasks.load_seed
|
185
393
|
end
|
186
394
|
|
395
|
+
namespace :seed do
|
396
|
+
desc "Truncates tables of each database for current environment and loads the seeds"
|
397
|
+
task replant: [:load_config, :truncate_all, :seed]
|
398
|
+
end
|
399
|
+
|
187
400
|
namespace :fixtures do
|
188
|
-
desc "Loads fixtures into the current environment's database. Load specific fixtures using FIXTURES=x,y. Load from subdirectory in test/fixtures using FIXTURES_DIR=z. Specify an alternative path (
|
189
|
-
task
|
190
|
-
require
|
401
|
+
desc "Loads fixtures into the current environment's database. Load specific fixtures using FIXTURES=x,y. Load from subdirectory in test/fixtures using FIXTURES_DIR=z. Specify an alternative path (e.g. spec/fixtures) using FIXTURES_PATH=spec/fixtures."
|
402
|
+
task load: :load_config do
|
403
|
+
require "active_record/fixtures"
|
191
404
|
|
192
405
|
base_dir = ActiveRecord::Tasks::DatabaseTasks.fixtures_path
|
193
406
|
|
194
|
-
fixtures_dir = if ENV[
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
407
|
+
fixtures_dir = if ENV["FIXTURES_DIR"]
|
408
|
+
File.join base_dir, ENV["FIXTURES_DIR"]
|
409
|
+
else
|
410
|
+
base_dir
|
411
|
+
end
|
199
412
|
|
200
|
-
fixture_files = if ENV[
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
413
|
+
fixture_files = if ENV["FIXTURES"]
|
414
|
+
ENV["FIXTURES"].split(",")
|
415
|
+
else
|
416
|
+
# The use of String#[] here is to support namespaced fixtures.
|
417
|
+
Dir["#{fixtures_dir}/**/*.yml"].map { |f| f[(fixtures_dir.size + 1)..-5] }
|
418
|
+
end
|
206
419
|
|
207
420
|
ActiveRecord::FixtureSet.create_fixtures(fixtures_dir, fixture_files)
|
208
421
|
end
|
209
422
|
|
210
|
-
# desc "Search for a fixture given a LABEL or ID. Specify an alternative path (
|
211
|
-
task
|
212
|
-
require
|
423
|
+
# desc "Search for a fixture given a LABEL or ID. Specify an alternative path (e.g. spec/fixtures) using FIXTURES_PATH=spec/fixtures."
|
424
|
+
task identify: :load_config do
|
425
|
+
require "active_record/fixtures"
|
213
426
|
|
214
|
-
label, id = ENV[
|
215
|
-
raise
|
427
|
+
label, id = ENV["LABEL"], ENV["ID"]
|
428
|
+
raise "LABEL or ID required" if label.blank? && id.blank?
|
216
429
|
|
217
430
|
puts %Q(The fixture ID for "#{label}" is #{ActiveRecord::FixtureSet.identify(label)}.) if label
|
218
431
|
|
219
432
|
base_dir = ActiveRecord::Tasks::DatabaseTasks.fixtures_path
|
220
433
|
|
221
434
|
Dir["#{base_dir}/**/*.yml"].each do |file|
|
222
|
-
if data =
|
435
|
+
if data = ActiveSupport::ConfigurationFile.parse(file)
|
223
436
|
data.each_key do |key|
|
224
437
|
key_id = ActiveRecord::FixtureSet.identify(key)
|
225
438
|
|
@@ -233,134 +446,229 @@ db_namespace = namespace :db do
|
|
233
446
|
end
|
234
447
|
|
235
448
|
namespace :schema do
|
236
|
-
desc
|
237
|
-
task
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
|
449
|
+
desc "Creates a database schema file (either db/schema.rb or db/structure.sql, depending on `config.active_record.schema_format`)"
|
450
|
+
task dump: :load_config do
|
451
|
+
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
452
|
+
ActiveRecord::Base.establish_connection(db_config)
|
453
|
+
ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config)
|
242
454
|
end
|
243
|
-
|
455
|
+
|
456
|
+
db_namespace["schema:dump"].reenable
|
244
457
|
end
|
245
458
|
|
246
|
-
desc
|
247
|
-
task :
|
248
|
-
ActiveRecord::Tasks::DatabaseTasks.load_schema_current(
|
459
|
+
desc "Loads a database schema file (either db/schema.rb or db/structure.sql, depending on `config.active_record.schema_format`) into the database"
|
460
|
+
task load: [:load_config, :check_protected_environments] do
|
461
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema_current(ActiveRecord::Base.schema_format, ENV["SCHEMA"])
|
249
462
|
end
|
250
463
|
|
251
|
-
task :
|
464
|
+
task load_if_ruby: ["db:create", :environment] do
|
465
|
+
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
466
|
+
Using `bin/rails db:schema:load_if_ruby` is deprecated and will be removed in Rails 6.2.
|
467
|
+
Configure the format using `config.active_record.schema_format = :ruby` to use `schema.rb` and run `bin/rails db:schema:load` instead.
|
468
|
+
MSG
|
252
469
|
db_namespace["schema:load"].invoke if ActiveRecord::Base.schema_format == :ruby
|
253
470
|
end
|
254
471
|
|
255
|
-
namespace :
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
472
|
+
namespace :dump do
|
473
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
474
|
+
desc "Creates a database schema file (either db/schema.rb or db/structure.sql, depending on `config.active_record.schema_format`) for #{name} database"
|
475
|
+
task name => :load_config do
|
476
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env, name: name)
|
477
|
+
ActiveRecord::Base.establish_connection(db_config)
|
478
|
+
ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config)
|
479
|
+
db_namespace["schema:dump:#{name}"].reenable
|
480
|
+
end
|
264
481
|
end
|
482
|
+
end
|
265
483
|
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
484
|
+
namespace :load do
|
485
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
486
|
+
desc "Loads a database schema file (either db/schema.rb or db/structure.sql, depending on `config.active_record.schema_format`) into the #{name} database"
|
487
|
+
task name => :load_config do
|
488
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env, name: name)
|
489
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config, ActiveRecord::Base.schema_format, ENV["SCHEMA"])
|
490
|
+
end
|
270
491
|
end
|
271
492
|
end
|
272
493
|
|
273
|
-
|
494
|
+
namespace :cache do
|
495
|
+
desc "Creates a db/schema_cache.yml file."
|
496
|
+
task dump: :load_config do
|
497
|
+
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
498
|
+
ActiveRecord::Base.establish_connection(db_config)
|
499
|
+
filename = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(
|
500
|
+
db_config.name,
|
501
|
+
schema_cache_path: db_config.schema_cache_path,
|
502
|
+
)
|
503
|
+
ActiveRecord::Tasks::DatabaseTasks.dump_schema_cache(
|
504
|
+
ActiveRecord::Base.connection,
|
505
|
+
filename,
|
506
|
+
)
|
507
|
+
end
|
508
|
+
end
|
274
509
|
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
f.puts ActiveRecord::Base.connection.dump_schema_information
|
286
|
-
f.print "\n"
|
510
|
+
desc "Clears a db/schema_cache.yml file."
|
511
|
+
task clear: :load_config do
|
512
|
+
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
513
|
+
filename = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(
|
514
|
+
db_config.name,
|
515
|
+
schema_cache_path: db_config.schema_cache_path,
|
516
|
+
)
|
517
|
+
ActiveRecord::Tasks::DatabaseTasks.clear_schema_cache(
|
518
|
+
filename,
|
519
|
+
)
|
287
520
|
end
|
288
521
|
end
|
289
|
-
db_namespace['structure:dump'].reenable
|
290
522
|
end
|
523
|
+
end
|
291
524
|
|
292
|
-
|
293
|
-
|
294
|
-
|
525
|
+
namespace :structure do
|
526
|
+
desc "Dumps the database structure to db/structure.sql. Specify another file with SCHEMA=db/my_structure.sql"
|
527
|
+
task dump: :load_config do
|
528
|
+
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
529
|
+
Using `bin/rails db:structure:dump` is deprecated and will be removed in Rails 6.2.
|
530
|
+
Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:dump` instead.
|
531
|
+
MSG
|
532
|
+
|
533
|
+
db_namespace["schema:dump"].invoke
|
534
|
+
db_namespace["structure:dump"].reenable
|
295
535
|
end
|
296
536
|
|
297
|
-
|
298
|
-
|
537
|
+
desc "Recreates the databases from the structure.sql file"
|
538
|
+
task load: [:load_config, :check_protected_environments] do
|
539
|
+
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
540
|
+
Using `bin/rails db:structure:load` is deprecated and will be removed in Rails 6.2.
|
541
|
+
Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:load` instead.
|
542
|
+
MSG
|
543
|
+
db_namespace["schema:load"].invoke
|
299
544
|
end
|
300
|
-
end
|
301
545
|
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
end
|
546
|
+
task load_if_sql: ["db:create", :environment] do
|
547
|
+
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
548
|
+
Using `bin/rails db:structure:load_if_sql` is deprecated and will be removed in Rails 6.2.
|
549
|
+
Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:load` instead.
|
550
|
+
MSG
|
551
|
+
db_namespace["schema:load"].invoke if ActiveRecord::Base.schema_format == :sql
|
309
552
|
end
|
310
553
|
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
554
|
+
namespace :dump do
|
555
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
556
|
+
desc "Dumps the #{name} database structure to db/structure.sql. Specify another file with SCHEMA=db/my_structure.sql"
|
557
|
+
task name => :load_config do
|
558
|
+
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
559
|
+
Using `bin/rails db:structure:dump:#{name}` is deprecated and will be removed in Rails 6.2.
|
560
|
+
Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:dump:#{name}` instead.
|
561
|
+
MSG
|
562
|
+
db_namespace["schema:dump:#{name}"].invoke
|
563
|
+
db_namespace["structure:dump:#{name}"].reenable
|
564
|
+
end
|
318
565
|
end
|
319
566
|
end
|
320
567
|
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
568
|
+
namespace :load do
|
569
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
570
|
+
desc "Recreates the #{name} database from the structure.sql file"
|
571
|
+
task name => :load_config do
|
572
|
+
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
573
|
+
Using `bin/rails db:structure:load:#{name}` is deprecated and will be removed in Rails 6.2.
|
574
|
+
Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:load:#{name}` instead.
|
575
|
+
MSG
|
576
|
+
db_namespace["schema:load:#{name}"].invoke
|
330
577
|
end
|
331
578
|
end
|
332
579
|
end
|
580
|
+
end
|
333
581
|
|
334
|
-
|
335
|
-
|
336
|
-
|
582
|
+
namespace :test do
|
583
|
+
# desc "Recreate the test database from the current schema"
|
584
|
+
task load: %w(db:test:purge) do
|
585
|
+
db_namespace["test:load_schema"].invoke
|
337
586
|
end
|
338
587
|
|
339
|
-
# desc "Recreate the test database from
|
340
|
-
task :
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
588
|
+
# desc "Recreate the test database from an existent schema file (schema.rb or structure.sql, depending on `config.active_record.schema_format`)"
|
589
|
+
task load_schema: %w(db:test:purge) do
|
590
|
+
should_reconnect = ActiveRecord::Base.connection_pool.active_connection?
|
591
|
+
ActiveRecord::Schema.verbose = false
|
592
|
+
ActiveRecord::Base.configurations.configs_for(env_name: "test").each do |db_config|
|
593
|
+
filename = ActiveRecord::Tasks::DatabaseTasks.dump_filename(db_config.name)
|
594
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config, ActiveRecord::Base.schema_format, filename)
|
595
|
+
end
|
596
|
+
ensure
|
597
|
+
if should_reconnect
|
598
|
+
ActiveRecord::Base.establish_connection(ActiveRecord::Tasks::DatabaseTasks.env.to_sym)
|
346
599
|
end
|
347
600
|
end
|
348
601
|
|
349
|
-
# desc "Recreate the test database from
|
350
|
-
task :
|
351
|
-
|
352
|
-
|
353
|
-
|
602
|
+
# desc "Recreate the test database from an existent structure.sql file"
|
603
|
+
task load_structure: %w(db:test:purge) do
|
604
|
+
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
605
|
+
Using `bin/rails db:test:load_structure` is deprecated and will be removed in Rails 6.2.
|
606
|
+
Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:test:load_schema` instead.
|
607
|
+
MSG
|
608
|
+
db_namespace["test:load_schema"].invoke
|
609
|
+
end
|
354
610
|
|
355
611
|
# desc "Empty the test database"
|
356
|
-
task :
|
357
|
-
ActiveRecord::
|
612
|
+
task purge: %w(load_config check_protected_environments) do
|
613
|
+
ActiveRecord::Base.configurations.configs_for(env_name: "test").each do |db_config|
|
614
|
+
ActiveRecord::Tasks::DatabaseTasks.purge(db_config)
|
615
|
+
end
|
358
616
|
end
|
359
617
|
|
360
618
|
# desc 'Load the test schema'
|
361
|
-
task :
|
619
|
+
task prepare: :load_config do
|
362
620
|
unless ActiveRecord::Base.configurations.blank?
|
363
|
-
db_namespace[
|
621
|
+
db_namespace["test:load"].invoke
|
622
|
+
end
|
623
|
+
end
|
624
|
+
|
625
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
626
|
+
# desc "Recreate the #{name} test database"
|
627
|
+
namespace :load do
|
628
|
+
task name => "db:test:purge:#{name}" do
|
629
|
+
db_namespace["test:load_schema:#{name}"].invoke
|
630
|
+
end
|
631
|
+
end
|
632
|
+
|
633
|
+
# desc "Recreate the #{name} test database from an existent schema.rb file"
|
634
|
+
namespace :load_schema do
|
635
|
+
task name => "db:test:purge:#{name}" do
|
636
|
+
should_reconnect = ActiveRecord::Base.connection_pool.active_connection?
|
637
|
+
ActiveRecord::Schema.verbose = false
|
638
|
+
filename = ActiveRecord::Tasks::DatabaseTasks.dump_filename(name)
|
639
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: "test", name: name)
|
640
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config, ActiveRecord::Base.schema_format, filename)
|
641
|
+
ensure
|
642
|
+
if should_reconnect
|
643
|
+
ActiveRecord::Base.establish_connection(ActiveRecord::Tasks::DatabaseTasks.env.to_sym)
|
644
|
+
end
|
645
|
+
end
|
646
|
+
end
|
647
|
+
|
648
|
+
# desc "Recreate the #{name} test database from an existent structure.sql file"
|
649
|
+
namespace :load_structure do
|
650
|
+
task name => "db:test:purge:#{name}" do
|
651
|
+
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
652
|
+
Using `bin/rails db:test:load_structure:#{name}` is deprecated and will be removed in Rails 6.2.
|
653
|
+
Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:test:load_structure:#{name}` instead.
|
654
|
+
MSG
|
655
|
+
db_namespace["test:load_schema:#{name}"].invoke
|
656
|
+
end
|
657
|
+
end
|
658
|
+
|
659
|
+
# desc "Empty the #{name} test database"
|
660
|
+
namespace :purge do
|
661
|
+
task name => %w(load_config check_protected_environments) do
|
662
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: "test", name: name)
|
663
|
+
ActiveRecord::Tasks::DatabaseTasks.purge(db_config)
|
664
|
+
end
|
665
|
+
end
|
666
|
+
|
667
|
+
# desc 'Load the #{name} database test schema'
|
668
|
+
namespace :prepare do
|
669
|
+
task name => :load_config do
|
670
|
+
db_namespace["test:load:#{name}"].invoke
|
671
|
+
end
|
364
672
|
end
|
365
673
|
end
|
366
674
|
end
|
@@ -369,15 +677,19 @@ end
|
|
369
677
|
namespace :railties do
|
370
678
|
namespace :install do
|
371
679
|
# desc "Copies missing migrations from Railties (e.g. engines). You can specify Railties to use with FROM=railtie1,railtie2"
|
372
|
-
task :
|
373
|
-
to_load = ENV[
|
680
|
+
task migrations: :'db:load_config' do
|
681
|
+
to_load = ENV["FROM"].blank? ? :all : ENV["FROM"].split(",").map(&:strip)
|
374
682
|
railties = {}
|
375
683
|
Rails.application.migration_railties.each do |railtie|
|
376
684
|
next unless to_load == :all || to_load.include?(railtie.railtie_name)
|
377
685
|
|
378
|
-
if railtie.respond_to?(:paths) && (path = railtie.paths[
|
686
|
+
if railtie.respond_to?(:paths) && (path = railtie.paths["db/migrate"].first)
|
379
687
|
railties[railtie.railtie_name] = path
|
380
688
|
end
|
689
|
+
|
690
|
+
unless ENV["MIGRATIONS_PATH"].blank?
|
691
|
+
railties[railtie.railtie_name] = railtie.root + ENV["MIGRATIONS_PATH"]
|
692
|
+
end
|
381
693
|
end
|
382
694
|
|
383
695
|
on_skip = Proc.new do |name, migration|
|
@@ -389,7 +701,7 @@ namespace :railties do
|
|
389
701
|
end
|
390
702
|
|
391
703
|
ActiveRecord::Migration.copy(ActiveRecord::Tasks::DatabaseTasks.migrations_paths.first, railties,
|
392
|
-
:
|
704
|
+
on_skip: on_skip, on_copy: on_copy)
|
393
705
|
end
|
394
706
|
end
|
395
707
|
end
|