我正在开发 Rails v2.3 应用。并使用 MySQL v5.1 作为我的数据库。
目前,在我的Rails应用程序中,我有一个 rake任务(从Helper调用一个方法),用于执行多个 .sql 转储文件以从中导入数据我的development database
的模板数据库。例如execute_dump("fill_all_tables.sql")
。
.sql 文件如下所示:
TRUNCTE TABLE cars;
ALTER TABLE DISABLE KEYS
INSERT INTO cars (col1,col2,col3,...) VALUES SELECT (...) FROM template_db.cars WHERE...
ALTER TABLE ENABLE KEYS
OPTIMIZE TABLE
然后,我有一个第二次 rake任务,它将运行一个脚本来创建一个新的(第三个)数据库,同时从同一个模板数据库导入数据但放入数据到新创建的3rd database
。
因此,两个rake任务(或方法)都从相同的模板数据库导入数据,但是将分隔到不同的数据库。 (一个用于开发数据库,另一个用于第三个数据库)。
我想让上述数据导入并行发生的事情。如何在Rails中实现?
我的development database
和3rd database
都在数据导入开始之前创建了相同的表。我的第一个rake任务将在数据导入后执行更多操作。
答案 0 :(得分:0)
如果您希望这样做,请尝试使用UNIX shell而不是Ruby。这样,你就不会乱搞纤维,叉子和线。创建两个填充目标数据库的rake任务,并将以下代码放在名为db_load.sh
的文件中:
#!/bin/sh
echo "preparing db"
rake my_project:prepare_database
echo "starting: copy of template to database 2"
rake my_project:copy_from_template_database_to_database_2 &
echo "starting: copy of template to database 3"
rake my_project:copy_from_template_database_to_database_3 &
最后两行末尾的&符号告诉shell以非阻塞方式运行这些任务。它们将并行运行。 (当然,更改rake任务的名称以适合您的项目。)
要运行此脚本,请键入chmod +x db_load.sh
以使其可执行,然后键入:
./db_load.sh
或者,您可以在rake任务中使用反引号表示法来完成同样的事情:
puts "starting: copy of template to database 2"
`rake my_project:copy_from_template_database_to_database_2 &`
puts "starting: copy of template to database 3"
`rake my_project:copy_from_template_database_to_database_3 &`