简短的回答:
db:schema:dump
不是正确的使用方法,但您可以在 Rakefile 中添加几行代码以获得您想要的结果。
更长的答案:
scuttlebutt是任务db:schema:dump
实际上不应该转储比结构更多的东西。(我知道,这是用词不当。)它类似于db:structure:dump
,除了一个给你一个 .rb 文件,另一个给你一个 .sql 文件。
您可以通过将以下代码附加到您的 Rakefile 来创建自己的转储 rake 任务:
对于 SQL 2008
task :mydump do
ActiveRecord::Base.connection.execute(
"dbcc traceon(2544, -1) \n go \n dbcc traceon(2546, -1) \n go \n dbcc stackdump"
)
end
使用 SQL 服务器本身创建转储(这是前面的代码所做的)会限制您,因为转储将始终转到您的日志目录;您不能另行指定。
如果您使用 SqlDumper 或其他一些实用程序,您将拥有更多的自由。您可以从您的 rake 任务中调用这样的实用程序,方法是使用该方法从命令行执行它system
。(参见下面的 MySQL 示例,它使用 mysqldump 实用程序。)
(我没有测试上述代码,我自己也没有安装 SQL 2008,但是在这个博客上解释了用于从 SQL 服务器创建转储的原始 SQL 代码。)
运行 rake 任务
然后在您的命令行上,调用rake mydump
or rake mydump RAILS_ENV=production
。
对于 MySQL
您可以使用以下方法为 MySQL 执行类似的操作:
task :mydump do
config = Rails.configuration.database_configuration[Rails.env]
system "mysqldump -h #{config["host"]} -u #{config["username"]} -p#{config["password"]} #{config["database"]} > db/dump.sql"
end