2012-01-14 11 views
1

私はストアドプロシージャを作成し、Rakeタスク内で実行したいと思います。私は次のエラーのため失敗したソースコマンドを使用してプロシージャを作成する必要があります(「コール」ステートメントを使用して)ストアドプロシージャを呼び出す前にActiveRecordを使用してRakeタスクからMySQL sql "source"コマンドを実行できません

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'source import_legacy_database.sql' at line 1: source import_legacy_database.sql

次の行が実行されると、このエラーが発生しました次の場合、コンソールではなく、rakeタスクで

ActiveRecord::Base.connection.execute "source import_legacy_database.sql" 

同じコマンド「ソースimport_legacy_database.sqlは」細かい動作します。

私はそれが存在しないため、データベースが手順を見つけることができませんので

ActiveRecord::Base.connection.execute "call import_legacy_database()" 

に障害が発生し、そのコマンドを呼び出さない場合。

ありがとうございました。

答えて

1

私は最終的にrakeタスクでSQL文を実行するための他の方法があるSHレイク方法を使用してバッチモードでhttp://dev.mysql.com/doc/refman/5.5/en/batch-mode.html

sh "mysql -u root mydb_development -e 'source import_legacy_database.sql'" 
+1

これは、アプリケーションサーバーとデータベースサーバーが同じマシン上にある場合に最適ですが、大部分の実稼働環境では、この方法は機能しません。 – jwg2s

2

これは、sourceコマンドがMySQLコマンドラインクライアントの実装に固有であり、ActiveRecordによって実装されたAPIの一部ではないためだと思います。たとえば、ActiveRecord内でDELIMITERコマンドを使用しようとすると同じことが起こります。

+0

をSQLコマンドを実行しましたか? –

+0

@negarnil私は実際にはわかりません。私はちょっと調べたが、答えは見つからなかった。 Rubyコードでファイルをロードし、SQLデリミタで分割して、結果の各部分を実行するとします。 –

関連する問題