Каковы некоторые успешные методы развертывания приложения Django на рабочем столе? - PullRequest
4 голосов
/ 26 апреля 2009

У меня есть приложение Django, которое я хотел бы развернуть на рабочем столе. Я немного прочитал об этом и вижу, что одним из способов является использование freeze . Я использовал это с переменным успехом в прошлом для приложений Python, но не уверен, что это лучший подход для приложений Django.

Мои вопросы: какие успешные методы вы использовали для развертывания приложений Django? Есть ли де-факто стандартный метод? Вы зашли в тупик? Мне нужно кроссплатформенное решение.

Ответы [ 2 ]

6 голосов
/ 17 июня 2009

Я сделал это пару лет назад для приложения Django, работающего в качестве локального демона. Он был запущен Twisted и упакован py2app для Mac и py2exe для Windows. Был и браузер, и фронтэн Air, поразивший его. По большей части это работало довольно хорошо, но я не смог развернуть его в дикой природе, потому что более крупный проект был отложен. Прошло много времени, и я немного заржавел в деталях, но вот несколько советов:

  • IIRC, наиболее проблематичной была загрузка Python C-расширений. У меня был модуль ассемблера Intel, написанный с помощью команд «asm», которые мне нужно было загрузить, чтобы получить низкоуровневые системные данные. Это заняло некоторое время, чтобы начать работать на обеих платформах. Если можете, старайтесь избегать расширений C.

  • Вам определенно понадобится установщик. Скорее всего, приложение будет работать в фоновом режиме, поэтому вам нужно будет пометить его как службу Windows, демон Unix или приложение для запуска Mac.

  • В вашем инсталляторе вы захотите указать способ определения свободного локального порта TCP. Возможно, вам придется написать небольшую подпрограмму-заглушку, которую запускает установщик, или использовать встроенную в сценарий программу установки, чтобы найти порт, который не был занят, и сохранить его в файле конфигурации. Затем вы загружаете файл конфигурации внутри вашего settings.py и любого внешнего интерфейса, который вы собираетесь развернуть. Это общий порт. Или вы можете просто выбрать случайное число и надеяться, что никакие другие службы на рабочем столе не будут вам мешать: -)

  • Если ваш внешний и внутренний приложения являются отдельными приложениями, вам нужно разработать API для них, чтобы они могли общаться друг с другом. Убедитесь, что вы указали флаг для возврата данных как в необработанном, так и в читаемом виде. Это действительно помогает в отладке.

  • Если вы хотите, чтобы Django мог отправлять уведомления пользователю, вам нужно интегрироваться с чем-то вроде Growl или получить расширения Python для Windows, чтобы вы могли вызывать всплывающие уведомления тостера.

  • Возможно, вы захотите придерживаться SQLite для базы данных, и в этом случае вам нужно будет убедиться, что вы используете семафоры для обработки нескольких запросов, претендующих на базу данных (или любой другой общий ресурс). Если ваше приложение доступно через браузер, пользователи могут открыть несколько окон и одновременно нажать на приложение. Если вы используете пользовательский интерфейс (native, Air и т. Д.), То вы можете контролировать, сколько экземпляров запущено в данный момент времени, поэтому это не будет такой большой проблемой.

  • Вам также понадобится какой-то доступ к средствам ведения журнала локальной системы, поскольку приложение будет работать в фоновом режиме и убедитесь, что вы перехватываете все свои исключения и направляете их в системный журнал. Большой проблемой было устранение проблем с запуском службы Windows. Это было бы невозможно без входа в систему.

  • Будьте осторожны с жестко закодированными путями, если хотите остаться кроссплатформенным. Возможно, вам придется положиться на установщик, чтобы написать запись файла конфигурации с фактическим путем установки, который вам нужно будет загрузить при запуске.

  • Проверка фактического развертывания, особенно на различных межсетевых экранах. Некоторые настольные брандмауэры довольно агрессивны в отношении блокировки доступа к сетевым службам, принимающим входящие запросы.

Это все, что я могу придумать. Надеюсь, это поможет.

4 голосов
/ 17 июня 2009

Если вы хотите хорошее решение, вы должны отказаться от кроссплатформенности. Ваш код должен быть переносимым, но ваше развертывание - почти по определению - должно зависеть от платформы.

Я бы рекомендовал использовать py2exe в Windows, py2app в MacOS X и создавать deb пакеты для Ubuntu с .desktop файл в нужном месте в пакете для записи, отображаемой в меню пользователя. К сожалению, для последнего варианта нет удобных «py2deb» или «py2xdg», но довольно просто создать соответствующий текстовый файл вручную.

И, конечно же, я бы порекомендовал пакетирование в Twisted в качестве веб-сервера , чтобы сделать приложение легко автономным:).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...