Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
8220cc9c
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
8220cc9c
编写于
3月 19, 2020
作者:
E
Eileen M. Uchitelle
提交者:
GitHub
3月 19, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #38770 from eileencodes/fix-db-rollback-rake-tasks
Handle db:rollback and db:rollback:[NAME] for multi-db apps
上级
23a61f8f
e33075a0
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
77 addition
and
0 deletion
+77
-0
activerecord/CHANGELOG.md
activerecord/CHANGELOG.md
+6
-0
activerecord/lib/active_record/railties/databases.rake
activerecord/lib/active_record/railties/databases.rake
+18
-0
railties/test/application/rake/multi_dbs_test.rb
railties/test/application/rake/multi_dbs_test.rb
+53
-0
未找到文件。
activerecord/CHANGELOG.md
浏览文件 @
8220cc9c
*
Add support for
`db:rollback:name`
for multiple database applications.
Multiple database applications will now raise if `db:rollback` is call and recommend using the `db:rollback:[NAME]` to rollback migrations.
*Eileen M. Uchitelle*
*
`Relation#pick`
now uses already loaded results instead of making another query.
*
`Relation#pick`
now uses already loaded results instead of making another query.
*Eugene Kenny*
*Eugene Kenny*
...
...
activerecord/lib/active_record/railties/databases.rake
浏览文件 @
8220cc9c
...
@@ -243,10 +243,28 @@ db_namespace = namespace :db do
...
@@ -243,10 +243,28 @@ db_namespace = namespace :db do
end
end
end
end
namespace
:rollback
do
ActiveRecord
::
Tasks
::
DatabaseTasks
.
for_each
(
databases
)
do
|
name
|
task
name
=>
:load_config
do
step
=
ENV
[
"STEP"
]
?
ENV
[
"STEP"
].
to_i
:
1
db_config
=
ActiveRecord
::
Base
.
configurations
.
configs_for
(
env_name:
Rails
.
env
,
name:
name
)
ActiveRecord
::
Base
.
establish_connection
(
db_config
)
ActiveRecord
::
Base
.
connection
.
migration_context
.
rollback
(
step
)
db_namespace
[
"_dump"
].
invoke
end
end
end
desc
"Rolls the schema back to the previous version (specify steps w/ STEP=n)."
desc
"Rolls the schema back to the previous version (specify steps w/ STEP=n)."
task
rollback: :load_config
do
task
rollback: :load_config
do
ActiveRecord
::
Tasks
::
DatabaseTasks
.
raise_for_multi_db
(
command:
"db:migrate:rollback"
)
step
=
ENV
[
"STEP"
]
?
ENV
[
"STEP"
].
to_i
:
1
step
=
ENV
[
"STEP"
]
?
ENV
[
"STEP"
].
to_i
:
1
ActiveRecord
::
Base
.
connection
.
migration_context
.
rollback
(
step
)
ActiveRecord
::
Base
.
connection
.
migration_context
.
rollback
(
step
)
db_namespace
[
"_dump"
].
invoke
db_namespace
[
"_dump"
].
invoke
end
end
...
...
railties/test/application/rake/multi_dbs_test.rb
浏览文件 @
8220cc9c
...
@@ -281,6 +281,31 @@ def db_up_and_down(version, namespace = nil)
...
@@ -281,6 +281,31 @@ def db_up_and_down(version, namespace = nil)
end
end
end
end
def
db_migrate_and_rollback
(
namespace
=
nil
)
Dir
.
chdir
(
app_path
)
do
generate_models_for_animals
rails
(
"db:migrate"
)
if
namespace
rollback_output
=
rails
(
"db:rollback:
#{
namespace
}
"
)
else
assert_raises
RuntimeError
,
/You're using a multiple database application/
do
rollback_output
=
rails
(
"db:rollback"
)
end
end
case
namespace
when
"primary"
assert_no_match
(
/OneMigration: reverted/
,
rollback_output
)
assert_match
(
/CreateBooks: reverted/
,
rollback_output
)
when
nil
else
assert_no_match
(
/TwoMigration: reverted/
,
rollback_output
)
assert_match
(
/CreateDogs: reverted/
,
rollback_output
)
end
end
end
def
db_prepare
def
db_prepare
Dir
.
chdir
(
app_path
)
do
Dir
.
chdir
(
app_path
)
do
generate_models_for_animals
generate_models_for_animals
...
@@ -480,6 +505,34 @@ class TwoMigration < ActiveRecord::Migration::Current
...
@@ -480,6 +505,34 @@ class TwoMigration < ActiveRecord::Migration::Current
db_up_and_down
"02"
,
"animals"
db_up_and_down
"02"
,
"animals"
end
end
test
"db:rollback raises on a multi-db application"
do
require
"
#{
app_path
}
/config/environment"
app_file
"db/migrate/01_one_migration.rb"
,
<<-
MIGRATION
class OneMigration < ActiveRecord::Migration::Current
end
MIGRATION
db_migrate_and_rollback
end
test
"db:rollback:namespace works"
do
require
"
#{
app_path
}
/config/environment"
app_file
"db/migrate/01_one_migration.rb"
,
<<-
MIGRATION
class OneMigration < ActiveRecord::Migration::Current
end
MIGRATION
app_file
"db/animals_migrate/02_two_migration.rb"
,
<<-
MIGRATION
class TwoMigration < ActiveRecord::Migration::Current
end
MIGRATION
db_migrate_and_rollback
"primary"
db_migrate_and_rollback
"animals"
end
test
"db:migrate:status works on all databases"
do
test
"db:migrate:status works on all databases"
do
require
"
#{
app_path
}
/config/environment"
require
"
#{
app_path
}
/config/environment"
db_migrate_and_migrate_status
db_migrate_and_migrate_status
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录