параллельно запустить импорт данных в моем случае - PullRequest
1 голос
/ 24 ноября 2011

Я занимаюсь разработкой приложения 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

Затем у меня есть задача 2nd rake, которая будетзапустить сценарий для создания новой (третьей) базы данных, а также импортировать данные из той же базы данных шаблонов , но поместить данные в новую созданную 3rd database.

Итак, две грабли (илиметоды), которые оба импортируют данные из одной базы данных шаблон , но помещают в отдельные базы данных .(одна для разработки базы данных, а другая для третьей базы данных).

Я хочу, чтобы вышеупомянутые данные импортировали вещи, чтобы происходить параллельно.Как я могу достичь в Rails?

PS

В моих development database и 3rd database есть одинаковые таблицы, созданные до начала импорта данных.И моя первая задача по рейку сделает больше вещей после импорта данных.

1 Ответ

0 голосов
/ 27 ноября 2011

Если вы хотите сделать это просто, попробуйте использовать оболочку UNIX вместо 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 &

Амперсанды в конце двух последних строк указывают оболочке запускать эти задачи неблокирующим образом. Они будут работать параллельно. (Конечно, измените имена задач rake в соответствии с вашим проектом.)

Чтобы запустить этот скрипт, введите chmod +x db_load.sh, чтобы сделать его исполняемым, затем введите:

     ./db_load.sh

В качестве альтернативы, вы можете использовать нотацию обратного кавычка в задании на рейк, чтобы выполнить то же самое:

    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 &`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...