Heroku: «Ошибка приложения» при использовании python http.server (не flask / django) - PullRequest
0 голосов
/ 29 апреля 2020

Примечание: Я начал с Heroku и Git с сегодняшнего утра. Поэтому, пожалуйста, потерпите меня. Я использую Windows 10, Firefox, Python 3.6.10 - http.server. Кроме того, я слежу за публикацией Medium,


Настройка:

Моя папка site выглядит следующим образом:

- templates 
    - ... front-end files only (html, css, js, etc)
- package.json
- Procfile
- requirements.txt
- runtime.txt
- server.py

Ниже приведены файлы, указанные выше,

package.json

{
    "name": "site",
    "version": "1.0.0",
    "scripts": {
        "start": "python server.py"
    },
    "dependencies": {},
    "keywords": [],
    "author": "",
    "license": "ISC"
}

Procfile

web: python server.py $PORT

requirements.txt

gunicorn==20.0.4

runtime.txt

python-3.6.10

server.py

from http.server import BaseHTTPRequestHandler, HTTPServer
import json
import re
from binascii import a2b_base64

rExt = re.compile(r'(?<=\.).+')
rTimeStamp = re.compile(r'(?<=\"timeStamp\":)\s*\d+')
rVote = re.compile(r'(?<=\"voters\":)\s*.+(?=\}$)')
mimeMap = {
  'html': 'text/html',
  'css': 'text/css',
  'js': 'text/javascript',
  'json': 'text/json',
  'txt': 'text/plain',
  'ico': 'image/x-icon',
  'jpg': 'image/jpg',
  'png': 'image/png'
}

class Server(BaseHTTPRequestHandler):
    def _send_headers(self, ext):
        self.send_response(200)
        self.send_header('Content-Type', mimeMap[ext])
        self.end_headers()

    def do_GET(self):
        self.path = '/index.html' if self.path == '/' else self.path
        ext = re.findall(rExt, self.path)[0]
        self._send_headers(ext)
        with open('.' + self.path, 'rb') as file:
            content = file.read()
        self.wfile.write(content)

    # do_POST declared here, very long code...

def startServer():
    serverAdd = ('', 8080)
    server = HTTPServer(serverAdd, Server)
    server.serve_forever()

startServer()

Проблема: После того, как я следовал за всеми Команды, приведенные в посте (без каких-либо ошибок), я успешно развернул на своем HerokuApp, но при открытии «https://rahulverma-blog.herokuapp.com/» я получаю application Error. Поскольку он предлагает запустить heroku logs --tail, я сделал и получил следующее,

... (i'm quoting only post build logs here)
2020-04-29T10:06:34.000000+00:00 app[api]: Build succeeded
2020-04-29T10:07:30.116043+00:00 heroku[web.1]: State changed from starting to crashed
2020-04-29T10:07:30.120089+00:00 heroku[web.1]: State changed from crashed to starting
2020-04-29T10:08:31.583051+00:00 heroku[router]: at=error code=H20 desc="App boot timeout" method=GET path="/" host=rahulverma-blog.herokuapp.com request_id=29ea0435-0f71-440d-91e8-76196d731e0f fwd="106.219.65.58" dyno= connect= service= status=503 bytes= protocol=https
2020-04-29T10:08:33.266420+00:00 heroku[web.1]: State changed from starting to crashed
2020-04-29T10:08:35.232741+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=rahulverma-blog.herokuapp.com request_id=15f11f7f-35dd-49dc-b6f7-2461cfb9093a fwd="106.219.65.58" dyno= connect= service= status=503 bytes= protocol=https

Не важно, IMO ...

Далее, Я попытался погуглить мою проблему и обнаружил "Python Flask Web API [Heroku]: он работает локально, но при развертывании выдает ошибку приложения" . Затем я попытался отредактировать свой Procfile соответственно, но это не сработало, возможно, сервер bcoz Sherman был создан с использованием Flask. Кстати, я получил OSError: Address already in use. Логи следующие,

2020-04-29T08:14:12.493652+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
2020-04-29T08:14:12.493652+00:00 app[web.1]: self.callable = self.load()
2020-04-29T08:14:12.493653+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
2020-04-29T08:14:12.493653+00:00 app[web.1]: return self.load_wsgiapp()
2020-04-29T08:14:12.493653+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
2020-04-29T08:14:12.493653+00:00 app[web.1]: return util.import_app(self.app_uri)
2020-04-29T08:14:12.493654+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 358, in import_app
2020-04-29T08:14:12.493654+00:00 app[web.1]: mod = importlib.import_module(module)
2020-04-29T08:14:12.493654+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
2020-04-29T08:14:12.493655+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
2020-04-29T08:14:12.493655+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 994, in _gcd_import
2020-04-29T08:14:12.493656+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 971, in _find_and_load
2020-04-29T08:14:12.493656+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
2020-04-29T08:14:12.493657+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
2020-04-29T08:14:12.493657+00:00 app[web.1]: File "<frozen importlib._bootstrap_external>", line 678, in exec_module
2020-04-29T08:14:12.493658+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
2020-04-29T08:14:12.493658+00:00 app[web.1]: File "/app/server.py", line 90, in <module>
2020-04-29T08:14:12.493658+00:00 app[web.1]: startServer()
2020-04-29T08:14:12.493659+00:00 app[web.1]: File "/app/server.py", line 87, in startServer
2020-04-29T08:14:12.493659+00:00 app[web.1]: server = HTTPServer(serverAdd, Server)
2020-04-29T08:14:12.493659+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/socketserver.py", line 456, in __init__
2020-04-29T08:14:12.493660+00:00 app[web.1]: self.server_bind()
2020-04-29T08:14:12.493660+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/http/server.py", line 136, in server_bind
2020-04-29T08:14:12.493660+00:00 app[web.1]: socketserver.TCPServer.server_bind(self)
2020-04-29T08:14:12.493661+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/socketserver.py", line 470, in server_bind
2020-04-29T08:14:12.493661+00:00 app[web.1]: self.socket.bind(self.server_address)
2020-04-29T08:14:12.493661+00:00 app[web.1]: OSError: [Errno 98] Address already in use
2020-04-29T08:14:12.493733+00:00 app[web.1]: [2020-04-29 08:14:12 +0000] [11] [INFO] Worker exiting (pid: 11)
...