如何将存储过程迁移到测试db?

Edu*_*eno 15 mysql testing stored-procedures ruby-on-rails-3

我在Rails 3.0.7中存储过程和测试数据库存在问题.跑步时

rake db:test:prepare

它从schema.rb迁移db表,而不是直接从迁移迁移.通过调用execute方法并传入诸如的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:再次准备,但仍然没有结果.

MySQL 5.5,Rails 3.0.7,Ruby 1.8.7.

提前致谢!

Jan*_*rik 9

没有其他rake任务,structure_dump定义如下:

# 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
Run Code Online (Sandbox Code Playgroud)

所以它显然只适用于表,而不是程序,除非你monkeypatch它.

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

mysqldump -R -u <user> <development_database> | mysql -u <user> <test_database>
Run Code Online (Sandbox Code Playgroud)


Joh*_*gle 0

正在寻找如何做同样的事情然后看到了这个:http ://guides.rubyonrails.org/migrations.html#types-of-schema-dumps

去引用:

“db/schema.rb 无法表达数据库特定项目,例如外键约束、触发器或存储过程。在迁移中,您可以执行自定义 SQL 语句,但模式转储程序无法从数据库中重新构建这些语句。如果您使用以下功能那么您应该将模式格式设置为:sql。”

IE:

config.active_record.schema_format = :sql

我自己还没有尝试过,所以我稍后会发布后续内容。