簡潔な答え:
db:schema:dump
使用するのは適切ではありませんが、Rakefile に数行のコードを追加して、必要な結果を得ることができます。
より長い答え:
問題は、タスク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
。(mysqldump ユーティリティを使用する以下の MySQL の例を参照してください。)
(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