я на самом деле сделать это примерно то, что часто. Есть кое-что, что вам нужно учитывать при попытке сделать что-то вроде этого:
-Поскольку это приложение получает много внешнего трафика пользователя или критического внутреннего трафика пользователя?
-Это бизнес-последствия для этого сервера увязли в этой длительной работе?
-Уверено ли на сервере, на котором размещено это приложение, требуются ли ресурсы (память и пространство на жестком диске) для обработки такой работы?
-У вас есть доступ SCP к серверу хоста для передачи файла на сервер?
Как только вы хорошо понимаете вышеизложенное, вы должны сделать следующее.
Написать сценарий импорта CSV (вероятно, кутила задача), не следует использовать рубиновый по умолчанию использовать библиотеки CSV-то тому подобное faster cvs или smarter cvs (они быстрее). Убедитесь, что при написании сценария импорта вы используете функцию перечислителя библиотеки, которая позволит избежать загрузки всей электронной таблицы в память (foreach). Кроме того, поскольку это, вероятно, будет длительная работа, поставьте некоторый выходной поток (например, puts или counter), чтобы у вас было некоторое представление о том, что происходит.
Протестируйте сценарий на своем локальном компьютере с помощью реальной таблицы, я не знаю, что такое целостность данных, но в крупноформатной таблице вы можете столкнуться с проблемами кодирования символов. Лучше всего это понять, не имея кучу неудачных прогонов на производстве, загромождающих вашу базу данных.
Развертывание код
Сжать CSV
Передача сжатого CSV в указанный вами каталог
распаковка CSV
Выполнить импорт сценария
Проверьте данные f или признаки успешного импорта, как разница в записях.
Удалить CSV
Я думаю, что вы могли бы искать Git LFS https://git-lfs.github.com/ – AppleCrazy
Я бы не грызть файл CSV 3.5gb производства. Сделайте это на своей локальной машине и экспортируйте дамп базы данных с помощью pgbackups или разделите на более мелкие файлы csv, которые могут быть импортированы в пакет. – max
Базы данных и снимки семян обычно не включаются в репозитории 'git', потому что они делают будущие клоны репо невероятно медленными, особенно если вы уронили в них что-то тяжелое. Почему бы не предварительно обработать это и предоставить его в виде отдельной загрузки с сервера, которым вы управляете? – tadman