gpt4 book ai didi

mysql - 如何将存储过程迁移到测试数据库?

转载 作者:IT老高 更新时间:2023-10-29 00:04:22 25 4
gpt4 key购买 nike

我对 Rails 3.0.7 中的存储过程和测试数据库有疑问。运行时

rake db:test:prepare

它从 schema.rb 迁移数据库表,而不是直接从迁移。通过调用执行方法并传入 SQL 字符串(例如 CREATE FUNCTION foo() ... BEGIN ... END;)在迁移中创建这些过程。

所以经过研究,我发现你应该使用

config.active_record.schema_format = :sql

application.rb 中。添加这一行后,我执行了

rake db:structure:dump rake db:test:clone_structure

第一个应该将结构转储到 development.sql 文件中,第二个应该从该文件创建测试数据库。但是我的存储过程和函数仍然没有出现在测试数据库中。如果有人知道这个问题。我们将不胜感激。

我也尝试再次运行 rake db:test:prepare,但仍然没有结果。

MySQL 5.5、Rails 3.0.7、Ruby 1.8.7。

提前致谢!

最佳答案

没有其他的 rake 任务,结构转储定义如下:

# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 354
def structure_dump #:nodoc:
if supports_views?
sql = "SHOW FULL TABLES WHERE Table_type = 'BASE TABLE'"
else
sql = "SHOW TABLES"
end

select_all(sql).map do |table|
table.delete('Table_type')
select_one("SHOW CREATE TABLE #{quote_table_name(table.to_a.first.last)}")["Create Table"] + ";\n\n"
end.join("")
end

所以它显然只适用于表,而不适用于过程,除非你对其进行猴子补丁。

据我所知,唯一的解决方案是使用 shell:

mysqldump -R -u <user> <development_database> | mysql -u <user> <test_database>

关于mysql - 如何将存储过程迁移到测试数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4108533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com