2012-07-03 20 views
3

Когда я скомпилирую свой Snap webapp (для его развертывания на производственный сервер), он выходит на 19 МБ! Что дает? Это нормально? Я делаю что-то неправильно?Уменьшить размер двоичного файла Snap?

Мой сайт имеет только 3 статических страницы, в основном snap's init project.

+0

Это как-то проблема? Будет ли использование разделяемых библиотек заставлять вас чувствовать себя лучше? –

+0

Ну, я должен загрузить 20 МБ над медленным подключением 'scp' к моему экземпляру EC2 каждый раз, когда хочу сделать небольшое изменение ... – drozzy

+1

Так звучит, что вы должны использовать общие библиотеки, чтобы вырезать дублирование. –

ответ

2

Я думаю, что Snap тянет много зависимостей. Одно из решений этой проблемы, которое, к сожалению, влияет на (исходное) время компиляции, - это установить библиотеки , которые зависят от вашего проекта от с опцией --split-objs. Это создаст тонну другого объекта, но сделает окончательный исполняемый файл намного меньшим, как в 2-4 раза меньше.

$ cabal install --enable-split-objs 

Если у вас уже есть библиотеки установлены, вам нужно будет удалить их первых, установить новую GHC или использовать песочницу с собственным набором пакетов.

Вы также должны использовать команду strip (в некоторых случаях это происходит автоматически).

Кроме того, вы можете использовать upx для сжатия исполняемых файлов и, наконец, rsync для загрузки минимально различных исполняемых файлов на сервер.

Использование общих библиотек (cabal install --enable-shared) может или не может помочь здесь: я не экспериментировал с этой опцией.

+0

Должен ли я делать это как на локальном сервере, так и на производстве? Или просто убедиться, что производство Haskell является достаточным? – drozzy

+0

Я пробовал как «-enable-split-objs', так и' -enabled-shared »в моем проекте snap, и ни один из них не работает. Бинарный файл имеет точно такой же размер. – drozzy

+0

@drozzy Вам необходимо создать библиотеки, зависящие от вашего проекта, с этими параметрами. Просто перекомпилировать ваш проект не будет. Я бы рекомендовал начать с чистой установки GHC для этой цели или с помощью решения для песочницы для этого (например, virthualenv или что-то еще). – Tener