Запуск нескольких приложений flask на сервере apache

#python #apache #flask

#python #apache #flask

Вопрос:

У меня есть несколько приложений flask var/www/html , например var/www/html/website , var/www/html/summary , var/www/html/sentiment

Как только я успешно запущу все приложения.

Затем я добавил еще одно приложение, для которого я создал файл conf и перезапустил сервер.

После этого все приложения перестали работать, только var/www/html/sentiment открываются.

Я проверил код в файле python, wsgi и conf для другого приложения так же, как и в sentiment.

Настроенный код приложения

flaskapp.py

 from flask import Flask
app = Flask(__name__)

@app.route('/sentiment')
def hello_world():
  return 'Hello from Sentiment!'

if __name__ == '__main__':
  app.run()


 

flaskapp.wsgi

 import sys
sys.path.insert(0, '/var/www/html/sentiment/')

from flaskapp import app as application
 

файл conf — /etc/apache2/sites-доступен/sentiment.conf

 <VirtualHost *:80>
                ServerName IP
                ServerAdmin admin@mywebsite.com
                WSGIScriptAlias / /var/www/html/sentiment/flaskapp.wsgi
                <Directory /var/www/html/sentiment/>
                        Order allow,deny
                        Allow from all
                </Directory>
                ErrorLog ${APACHE_LOG_DIR}/error.log
                LogLevel warn
                CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

 

Краткий код приложения
flaskapp.y

 from flask import Flask
app = Flask(__name__)

@app.route('/summary')
def hello_world():
  return 'Hello from Summary!'

if __name__ == '__main__':
  app.run()
 

flaskapp.wsgi

 import sys
sys.path.insert(0, '/var/www/html/summary/')

from flaskapp import app as application
 

/etc/apache2/sites-доступно/summary.conf

 <VirtualHost *:80>
                ServerName IP
                ServerAdmin admin@mywebsite.com
                WSGIScriptAlias / /var/www/html/summary/flaskapp.wsgi
                <Directory /var/www/html/summary/>
                        Order allow,deny
                        Allow from all
                </Directory>
                ErrorLog ${APACHE_LOG_DIR}/error.log
                LogLevel warn
                CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
 

Тем не менее, когда я открываю ip / sentiment, он работает, но ip / summary выдает

The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

Есть какие-либо предложения по этому поводу?

Комментарии:

1. ваши приложения работают на одном и том же порту, вы пробовали менять порты для каждого приложения в app.run(port=xxxx) ?

2. Да, я попытался указать другой порт в app.run(), но все та же проблема. Одновременно выполняется только одно приложение

3. Однако, когда вы используете <VirtualHost *:80> , кажется, что вы переопределяете порт по умолчанию для своих приложений. это означает, что все ваши приложения работают на порту 80. Вы пробовали использовать разные порты в файле конфигурации?

4. да, но, пожалуйста, приведите другой пример порта

5. попробуйте порты от 5005 до 5010, чтобы избежать каких-либо конфликтов с тем, что вы, возможно, уже запустили. вы можете просто настроить каждый экземпляр следующим образом: <VirtualHost *:5005> и так далее..

Ответ №1:

Проблема связана с вашим именем WSGIScriptAlias.

/ указывает на все в каталоге.

Дайте уникальные псевдонимы для всех приложений.

Пример:

Изменить / на /app1 для WSGIScriptAlias

Изменить / на /app2 для WSGIScriptAlias

в обоих файлах.

Затем перезапустите сервер.