2013-07-04 2 views
3

Я успешно запускаю simplest pyramid app в своей локальной виртуальной среде. Теперь я работаю над this tutorial, но я пытаюсь сделать это еще дальше, запустив его на моем сайте personal hosting, который я использую, чтобы обходиться с такими вещами.Начало работы с пирамидой на реальном сервере

Мой вопрос есть. Что я передаю в make_server(host, port, app) как параметры и какой url я иду, чтобы проверить, работает ли он? Я знаю, что это простой вопрос, я просто не привык к подобной работе, и documentation не помогает мне.

Бонусные очки:

Каковы различия между запущенными это на локальной виртуальной среде и надлежащего хостинга с точки зрения такого рода веб-приложения?

важно редактировать: мой провайдер BlueHost и так как у меня нет выделенного IP, я не разрешается открывать свои собственные порты, что заставляет меня задаться вопросом, если это возможно даже

+0

Вы не должны спрашивать это на поддержку форум тех, кто поставляет хостинг? Если это VPS, то это одно, если это общий хостинг, тогда обычно это какая-то панель управления ... и т. Д. И т. Д. ... –

+0

@JonClements no Я пытаюсь задать вопрос о программировании в пирамиде, я не удивлюсь, если мой хостинг никогда не слышал о пирамиде – Stephan

+0

И ответ: вы предоставляете «хост» и «порт», что система, в которой вы работаете, доступна/открыта для вас. Так что это не вопрос программирования ... Вероятно, они разрешили порт, который знает, как добраться до вашего приложения из своего интерфейса/независимо ... Итак, вам нужно найти то, что есть, а затем привязать к этому порту. .. –

ответ

5

Фактически, размещение приложения Python на «реальном» веб-сервере существенно отличается от его запуска на вашем локальном компьютере: локально вы полагаетесь на небольшой веб-сервер, который часто встроен в фреймворк, однако веб-сервер часто имеет ограничения (например, он может выполнять запросы только в одном потоке). В некоторых фреймворках (Django) явно указано, что их встроенный сервер должен использоваться только для разработки.

В производственной среде приложение Python обычно обслуживается веб-сервером «промышленного класса», таким как Apache или Nginx, который заботится о таких проблемах, как привязка к низким портам, отказ от привилегий, создание множества «рабочих» процессов , работа с виртуальными хостами, дезинформирование искаженных запросов и т. д. Приложение Python затем запускается на веб-сервере, используя что-то вроде mod_wsgi или fcgi для Apache или uwsgi для Nginx. Кроме того, ваше приложение запускается как отдельный процесс, прослушивающий 127.0.0.1:6543 (так же, как вы делаете его локально), а «передний» веб-сервер проксирует все запросы к вашему приложению и обратно.

Дело: Это может быть сложно/невозможно разместить приложение Python на общего назначения общего хостинга, если ваш провайдер не имеет явной поддержки хостинга WSGI приложений (попросите инструкции)

Еще один момент: за $ 5/mo в эти дни вы можете получить красивую выделенную виртуальную машину, где вы можете установить все, что хотите, и не делиться ею с кем-либо. Хостинг веб-сайта Python намного проще, чем при работе с общим хостингом.

Ааа, и ответить на вопрос: в реальном приложении производства последние 2 строки, например:

server = make_server('0.0.0.0', 8080, app) 
server.serve_forever() 

не будет использоваться - вместо того, чтобы настроить веб-сервер, чтобы он знал, что переменная app содержит ваше приложение wsgi. Обратитесь к next chapter в документах для более реалистичного примера.

+0

Я бы не согласился, так как это зависит от того, какая у вас была среда разработки. Например, я использовал стек Bitnami для разработки на моей локальной машине, и когда я, наконец, запустил его, действительно было очень мало различий. Теперь это зависит от серверов, например, если вы хотите включить настройку сервера как что-то другое, то да, это совсем другое, кроме того, что основные принципы остаются прежними. Только мои два цента. –

+0

@GamesBrainiac: Ну, это похоже на то, что ехать на автобусе и летать на самолете - это то же самое - вы в основном покупаете билет и берете его, но это только потому, что кто-то делает всю тяжелую работу вождения/полета для вас :) С Bitnami у вас есть предварительно настроенное «приложение»/виртуальная машина, которая занимается настройкой вашего локального компьютера, и затем вы можете использовать встроенную виртуальную машину для создания производственного сервера, к которому вы можете развернуть. Я не вижу, как это противоречит моей точке зрения, а именно: «OP должен использовать« настоящий »веб-сервер для производства, который отличается от того, что использует OP в настоящее время» – Sergey

+0

Правда, но на самом деле не так много разница, ничто не мешает кому-то, кто уже сделал приложение офлайн, нажать его онлайн. Ничего «большого». –

3

Попробуйте запустить сайт на бесплатную учетную запись на PythonAnywhere, ее простейшую для начала.

Вы можете просто сделать git-репо из ваших файлов на github, а затем клонировать в PythonAnywhere (я упоминаю конкретный хост, потому что вы хотите знать, как запустить что-то на хосте, и я нашел его для быть самым легким). Что касается особенностей, просто спросите на их форумах, они помогут вам.

Я изначально сделал сайт django, и это было мое первое онлайн-приложение, и я узнал приличную сумму.

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

Надеюсь, это поможет.

+0

Если это ответит на ваш вопрос, пожалуйста, примите его. –

+1

Это не так, я уже знал, как пользоваться онлайн-переводчиками на питоне, и вы не ответили ни на один из моих вопросов, я поддержал вас, потому что вы прилагаете усилия. – Stephan

+1

@Stephan: PythonAnywhere предоставляет хостинг: «Мы не только поддерживаем Django: Flask, Bottle, web2py ... мы можем обрабатывать любую веб-инфраструктуру WSGI, которую вы хотите использовать»: https://www.pythonanywhere.com/ подробности/хостинг – Sergey

1

Вы должны использовать makeserver для тестирования. В этом случае вы часто завернуть немного runserver-Script, как это (как учебник также указывает):

#!/bin/env python 
from wsgiref.simple_server import make_server 
from yourapp.core import app # whereever your wsgi app lives 

if __name__ == '__main__': 
    server = make_server('0.0.0.0', 6547, app) 
    print ('Starting up server on http://localhost:6547') 
    server.serve_forever() 

Если вы хотите, чтобы развернуть в Apache вам нужен модуль mod_wsgi. Я бы рекомендовал получить хостера с поддержкой nginx или lighthttpd. Приложения WSGI могут очень удобно развертываться с использованием модуля uwsgi в сочетании с virtualenv.

Если хост не позволяет открывать порты, вы можете настроить uwsgi для использования сокетов unix.

я написал сообщение в блоге, объясняющее, как развернуть Django за uwsgi + Nginx один раз, вы можете использовать это в качестве отправной точки для игр с настройками развертывания: http://blog.johannesklug.de/2012/11/27/deploying-django-behind-nginx-with-uwsgi-and-virtualenv/

Примечанием: тот же объект приложения вы кормите в make_server вы будете использовать uwsgi для запуска рабочего процесса и открытия сокета.

Конфигурация образца (не проверял, но отрывок из моего блога пост) для uwsgi:

# uwsgi.ini 
[uwsgi] 
# path to where you put your project code 
chdir=/home/project/project 

# if the app object resides in core.py 
module=core:app 

# this switch tells uwsgi to spawn a master process, 
# that will dynamically spawn new child processes for 
# server requests 
master=True 
# uwsgi stores the pid of your master process here 
pidfile=/home/project/master.pid 
vacuum=True 
# path to your virtual environment, you should be using virtualenv 
home=/home/project/env/ 
# path to log file 
daemonize=/home/project/log 
# this is where you need to point nginx to, 
# if you chose to put this in project home make 
# sure the home dir is readable and executable by 
# nginx 
socket=/tmp/uwsgi.sock 

Пример конфигурации для Nginx:

server { 
    listen  80; 
    server_name yourserver.example.org; 

    location/{ 
     uwsgi_pass unix:///tmp/uwsgi.sock; 
     include uwsgi_params; 
    } 
} 
+0

Спасибо! Я соглашусь с этим ответом, когда я получу его для работы. – Stephan

+0

Спасибо, это было бы высоко оценено :). – room2web