Haskell Snap: развертывание приложений и зависимости во время выполнения - PullRequest
5 голосов
/ 02 апреля 2012

Очистка исходного каталога проекта Snap (удаление dist) приводит к следующей жалобе:

A web handler threw an exception. Details:
GHC error: can't find a package database at dist/package.conf.inplace

Так что, если я почистить исходный каталог, он перестанет работать? Это происходит только если я компилирую с флагом разработки?

Это подводит меня к вопросу развертывания моментальных приложений. Что мы на самом деле rsync к серверу и каковы зависимости во время выполнения? Конечно же, я не хочу устанавливать всю платформу haskell на сервер развертывания. Все, что мне нужно на сервере - это исполняемый файл проекта и статические файлы, такие как * .tpl, * .css и т. Д. Это правильно?

Я вижу два способа развертывания приложения: rsync исполняемого файла и его зависимостей или создание бинарного дистрибутива дистрибутива и его перенос на сервер. Какова общая практика?

Какие именно файлы мне нужно включить в двоичный скрипт tarball или rsync, чтобы удовлетворить все зависимости времени выполнения?

Спасибо

1 Ответ

3 голосов
/ 02 апреля 2012

Во-первых, да, это всего лишь результат использования режима разработки. Он использует все виды артефактов из вашей среды компиляции. (Это единственный способ обеспечить правильное дублирование среды компиляции при динамической перезагрузке.) Если вы удалите их, он перестанет работать.

Но в производственном режиме все необходимые вам двоичные и статические ресурсы. Ну и любые динамические библиотеки, с которыми GHC связывает исполняемый файл. Это в основном просто стандартные вещи вроде libc. Единственное, чего иногда не хватает в стандартных установках Linux, - это libgmp. Конечно, если вы используете какой-либо код FFI, который связывается с другими динамическими библиотеками, вы должны быть уверены, что эти библиотеки также покрыты.

...