Как ВЫ развертываете свое приложение WSGI? (и почему это - лучший способ),

Благодаря этому ответу Ашиша ( Можно ли перенести локальные модули из node_module? ), я смог найти решение.

Таким образом, проблема заключалась в том, что модуль, который я использовал, импортировал файл js, который не был полностью перенесен (оператор распространения объектов), вместо файла ts или tsx. Это означало, что мне нужно было переустановить загрузчик babel, чтобы я мог сделать отдельный проход с загрузчиком babel для файлов js. Следующая проблема, с которой я столкнулся, заключалась в том, что модуль был скомпилирован с помощью commonjs, и поэтому импорт также пришлось переносить.

Это мои погрузчики выглядят сейчас.

{
   {
      test: /\.js$/,
      use: {
        loader: 'babel-loader',
        options: {
          presets: [
            [
              'edge',
              {
                transpile: 'es2015',
                modules: 'commonjs'
              }
            ]
          ]
        }
      },
      include: [path.resolve(__dirname, 'node_modules/@furystack')]
    },
    {
      test: /\.tsx?$/,
      use: [
        {
          options: {
            useTranspileModule: true,
            forceIsolatedModules: true,
            useCache: true,
            useBabel: true,
            babelOptions: {
              babelrc: false /* Important line */,
              presets: [
                [
                  'edge',
                  {
                    transpile: 'modern',
                    modules: 'false'
                  }
                ]
              ]
            },
            reportFiles: ['src/**/*.{ts,tsx}'],
            babelCore: '@babel/core'
          },
          loader: 'awesome-typescript-loader'
        }
      ],
      include: [path.resolve(__dirname, 'src')]
    },
}

42
задан Ali Afshar 23 September 2010 в 12:45
поделиться

9 ответов

Как всегда: Это зависит ;-)

, Когда мне не нужны никакие апачские функции, я иду с чистым веб-сервером Python как вставка и т.д., Какой точно зависит от Вашего приложения, которое я предполагаю и могу быть решен путем выполнения некоторых сравнительных тестов. Я всегда хотел сделать некоторых, но никогда не приезжал в него. Я предполагаю, что Порождение могло бы иметь некоторые преимущества в использовании не блокирующий IO из поля, но у меня иногда были проблемы с ним из-за исправления, которое это делает.

Вы всегда свободны поместить лак впереди также, конечно.

, Если Apache требуется, я обычно иду с решением 3 так, чтобы я мог разделить процессы. Можно также более легко переместить процессы в другие серверы и т.д. Мне просто нравится разделять вещи.

Для статических файлов я использую прямо сейчас отдельный сервер для проекта, который просто служит статическому images/css/js. Я использую lighttpd в качестве веб-сервера, который имеет высокую эффективность (в этом случае, у меня нет лака впереди больше).

Другой полезный инструмент supervisord для управления и контроля этих сервисов.

я дополнительно использую buildout для управления моим развертыванием и песочницами разработки (вместе с virtualenv).

27
ответ дан MrTopf 26 November 2019 в 23:47
поделиться

я абсолютно любил бы Вас к, перенес меня с деталями о, какой и whys, специализированный материал, и т.д.

Ho. Хорошо Вы попросили его!

Как Daniel я лично использую Apache с mod_wsgi. Это является все еще достаточно новым, что развертывание его в некоторых средах может быть борьбой, но если Вы компилируете все сами так или иначе, что это довольно легко. Я нашел это очень надежным, даже ранние версии. Опоры Graham Dumpleton для того, чтобы удержать контроль над ним в значительной степени один.

Однако для меня важно что работа приложений WSGI через все возможные серверы. Существует что-то вроде дыры в данный момент в этой области: у Вас есть стандарт WSGI, говоря Вам, что делает вызываемое WSGI (приложение), но нет никакой стандартизации развертывания; никакой единственный способ сказать веб-сервер, где найти применение. Нет также никакого стандартизованного способа, чтобы заставить сервер перезагрузить приложение при обновлении его.

подход, который я принял, должен поместить:

  • вся прикладная логика в модулях/пакетах, предпочтительно в классах

  • все определенное для веб-сайта удовлетворение требованиям заказчика, которое будет сделано путем разделения на подклассы главного приложения и переопределяющих участников

  • все определенные для сервера настройки развертывания (например, фабрика соединения с базой данных, почтовые релейные настройки) как класс __ init __ () параметры

  • , один верхний уровень ‘application.py’ сценарий, который инициализирует Класс приложений с корректными настройками развертывания для текущего сервера, затем запускает приложение таким способом, которым это может работать развернутое сценарием CGI, mod_wsgi WSGIScriptAlias (или Пассажир, который, по-видимому, работает тот же путь), или может взаимодействоваться с из командной строки

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

Поэтому, на что application.py похож в конце, являются чем-то как:

#!/usr/bin/env python

import os.path
basedir= os.path.dirname(__file__)

import MySQLdb
def dbfactory():
    return MySQLdb.connect(db= 'myappdb', unix_socket= '/var/mysql/socket', user= 'u', passwd= 'p')

def appfactory():
    import myapplication
    return myapplication.Application(basedir, dbfactory, debug= False)

import wsgiwrap
ismain= __name__=='__main__'
libdir= os.path.join(basedir, 'system', 'lib')
application= wsgiwrap.Wrapper(appfactory, libdir, 10, ismain)

wsgiwrap. Обертка проверяет каждые 10 секунд, чтобы видеть, был ли какой-либо из модулей приложения в libdir обновлен, и раз так делает некоторое противное sys.modules волшебство разгрузить их всех надежно. Тогда appfactory () назовут снова для получения нового экземпляра обновленного приложения.

(Можно также использовать инструменты командной строки такой в качестве [1 121]

./application.py setup
./application.py daemon

для выполнения любой установки и рычагов фоновых задач, обеспеченных приложением callable —  a бит как то, как distutils работает. Это также отвечает для запущений/останавливания/перезапущения как init сценарий.)

Другой прием, который я использую, должен поместить настройки развертывания для нескольких серверов (разработка/тестирование/производство) в том же application.py сценарии и осуществить сниффинг ‘socket.gethostname () ’ для решения который определенный для сервера набор настроек использовать.

В какой-то момент я мог бы упаковать wsgiwrap и выпустить его правильно (возможно под другим именем). Тем временем, если Вам интересно, Вы видите версию разработки собачьего корма в http://www.doxdesk.com/file/software/py/v/wsgiwrap-0.5.py .

13
ответ дан bobince 26 November 2019 в 23:47
поделиться

Абсолютной самой легкой вещью развернуться является CherryPy. Ваше веб-приложение может также стать автономным веб-сервером. CherryPy является также довольно быстрым сервером, полагая, что он записан в чистом Python. После этих слов это не Apache. Таким образом я нахожу, что CherryPy является хорошим выбором для веб-приложений пониженной громкости.

Кроме этого, я не думаю, что существует любое право, или неправильно ответьте на этот вопрос. Много веб-сайтов большого объема было основано на технологиях, о которых Вы говорите, и я не думаю, что можно пойти также неправильно любым из тех путей (хотя я скажу, что соглашаюсь с модификацией-wsgi, не находящейся на должном уровне на каждом неапачском сервере).

кроме того, я использовал isapi_wsgi для развертывания приложений Python под IIS. Это меньше, чем идеальная установка, но это работает, и Вы не всегда добираетесь для выбора иначе, когда Вы живете в центральном окнами мире.

13
ответ дан Jason Baker 26 November 2019 в 23:47
поделиться

Nginx инвертируют и статический совместный доступ к файлам прокси + XSendfile + uploadprogress_module. Ничто не бьет его для цели.

На стороне WSGI или Apache + mod_wsgi или cherrypy сервер. Мне нравится использовать cherrypy wsgi сервер для приложений на серверах с меньшей памятью и меньшим количеством запросов.

Обоснование:

я сделал сравнительные тесты с различными инструментами для различных популярных решений.

у меня есть больше опыта с более низким уровнем TCP/IP, чем веб-разработка, особенно http реализации. Я более уверен, что могу распознать хороший http сервер, чем я могу распознать хорошую веб-платформу.

я знаю Скрученный намного больше, чем Django или Опоры. Стопка http в Скрученном все еще не до этого, но это будет там.

6
ответ дан Vasil 26 November 2019 в 23:47
поделиться

Я использую Google App Engine для приложения, которое я разрабатываю. Это запускает приложения WSGI. Вот пара битов информации о нем.

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

4
ответ дан Baltimark 26 November 2019 в 23:47
поделиться

Apache httpd + mod_fcgid использующий web.py (который является wsgi приложением).

Работы как очарование.

3
ответ дан Bjorn 26 November 2019 в 23:47
поделиться

TurboGears (2.0)

TurboGears 2.0 уезжает Бета в течение следующего месяца (был в нем в течение большого количества времени). 2.0 улучшает 1,0 ряда и пытается дать Вам лучший среди аналогов стек WSGI, таким образом, он делает некоторый выбор по умолчанию для Вас, если Вы хотите наименьшее количество суеты.

это имеет эти tg* инструменты для тестирования и развертывания в 1.x ряд, но теперь преобразованный к paster эквиваленты в 2,0 рядах, какие shoud кажутся знакомыми, если у Вас есть expermiented с pylons.

tg-admin quickstart —> paster quickstart
tg-admin info —> paster tginfo
tg-admin toolbox –> paster toolbox
tg-admin shell –> paster shell
tg-admin sql create –> paster setup-app development.ini

Опоры

Это требуется быть более гибкими в стеке WSGI (выбор ORM, выбор templater, выбор формирования), Опоры становится объединенным выбором. Это было бы мой рекомендуемый выбор , так как он предлагает превосходную документацию и позволяет Вам экспериментировать с различными компонентами.

Это - удовольствие работать с в результате и продолжает работать под Apache (производственное развертывание) или автономный (полезный для тестирования и экспериментирования этапа).

, таким образом, это следует, можно сделать обоих с Опорами:

  • 2 опции для стадии тестирования (python автономный)

  • 4 в масштабируемых производственных целях (FastCGI, принимая базу данных Вы выбираете, может поддержать на высоком уровне)

администраторский интерфейс Опор очень похож на TurboGears. Вот игрушка автономна пример:

$ paster create -t pylons helloworld
$ cd helloworld
$ paster serve --reload development.ini

для развертывания производственного класса, Вы могли обратиться к руководству по установке Apache + FastCGI + mod_rewrite, доступен здесь . это увеличилось бы к большинству потребностей.

4
ответ дан popcnt 26 November 2019 в 23:47
поделиться

Мы используем чистую Вставку для некоторых наших веб-сервисов. Легко развернуться (с нашим внутренним механизмом развертывания; мы не используем Вставку, Развертываются или что-нибудь как этот), и хорошо минимизировать различие между производственными системами и что работает на рабочих станциях разработчиков. Протест: мы не ожидаем низкую задержку из самой Вставки из-за тяжелой природы наших запросов. В некотором сравнительном тестировании сырой нефти, которое мы, мы не становились фантастическими результаты; это только что закончило тем, что было спорно из-за расхода нашего типичного обработчика запросов. До сих пор это хорошо работало.

Статические данные были обработаны абсолютно отдельным (и несколько "органически" выращены), стеки, включая использование S3, Akamai, Apache и IIS, различными способами.

1
ответ дан Jacob Gabrielson 26 November 2019 в 23:47
поделиться

Apache+mod_wsgi,

Простой, чистый. (только четыре строки конфигурации веб-сервера), легкий для другого sysadimns получить их голову вокруг.

1
ответ дан Daniel Von Fange 26 November 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: