无法使用ActiveRecord从Rake任务执行MySQL sql“source”命令

时间:2012-01-14 23:35:36

标签: mysql ruby-on-rails stored-procedures rake

我编写了一个存储过程,并希望在Rake任务中执行它。

在调用存储过程之前(通过“call”语句)我应该使用source命令创建过程,该命令因以下错误而失败:

  

Mysql2 ::错误:您的SQL语法中有错误;检查手册   对应于您的MySQL服务器版本,以获得正确的语法   在第1行:source的'source import_legacy_database.sql'附近使用   import_legacy_database.sql

执行以下行时会发生此错误:

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

相同的命令“source import_legacy_database.sql”在控制台中运行正常,但在Rake任务中运行不正确。

如果我不打电话给那个命令那么

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

失败,因为数据库找不到该过程,因为它不存在。

先谢谢。

2 个答案:

答案 0 :(得分:2)

我认为这是因为source命令特定于MySQL命令行客户端的实现,并且不是ActiveRecord实现的API的一部分。例如,如果您尝试在ActiveRecord中使用DELIMITER命令,则会发生同样的事情。

答案 1 :(得分:1)

我最终使用sh Rake方法并以批处理模式http://dev.mysql.com/doc/refman/5.5/en/batch-mode.html

执行sql命令
sh "mysql -u root mydb_development -e 'source import_legacy_database.sql'"