找不到模块错误没有名为“应用程序” Heroku 的模块:

时间:2021-04-22 15:48:57

标签: python flask heroku

我多次在 Heroku 上部署了我的 Flask 应用程序。即使在成功构建后,我的应用程序也没有运行。每当我打开链接时,它总是提示一些应用程序错误。

  1. main.py

    from flask import Flask, render_template, request,session,redirect
    from flask_sqlalchemy import SQLAlchemy
    from flask_mail import Mail
    import json
    from werkzeug.utils import secure_filename
    from datetime import datetime
    import os
    import math
    
    with open('config.json', 'r') as c:
        params = json.load(c)["params"]
    
    local_server = True
    app = Flask(__name__)
    app.secret_key = 'key'
    app.config['UPLOAD_FOLDER']=params['upload_location']
    #app.secret_key = 'super-secret-key'
    app.config.update(                       #for mail updates
        MAIL_SERVER = 'smtp.gmail.com',
        MAIL_PORT = '465',
        MAIL_USE_SSL = True,
        MAIL_USERNAME = params['gmail-user'],
        MAIL_PASSWORD = params['gmail-password']
    )
    mail = Mail(app)
    if (local_server):
        app.config['SQLALCHEMY_DATABASE_URI'] = params['local_uri']
    else:
        app.config['SQLALCHEMY_DATABASE_URI'] = params['prod_uri']
    
    db = SQLAlchemy(app)
    
    
    class Contacts(db.Model):
        sno = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(80), nullable=False)
        phone_num = db.Column(db.String(12), nullable=False)
        msg = db.Column(db.String(120), nullable=False)
        date = db.Column(db.String(12), nullable=True)
        email = db.Column(db.String(20), nullable=False)
    
    class Posts(db.Model):
        sno = db.Column(db.Integer, primary_key=True)
        title = db.Column(db.String(80), nullable=False)
        slug = db.Column(db.String(12), nullable=False)
        content = db.Column(db.String(120), nullable=False)
        date = db.Column(db.String(12), nullable=True)
        tagline = db.Column(db.String(20) , nullable = False)
        img_file = db.Column(db.String(12) , nullable = True)
    
    @app.route("/")
    def home():
        posts = Posts.query.filter_by().all()
        last = math.ceil(len(posts)/int(params['no_of_posts']))
        page = request.args.get('page')
        if(not str(page).isnumeric()):
            page = 1
    
        page= int(page)
        posts = posts[(page-1)*int(params['no_of_posts']):(page-1)*int(params['no_of_posts']) + int(params['no_of_posts'])]
        #Pagination Logic
        #when user is on first page
        if(page==1):
            prev="#"
            next = "/?page="+str(page+1)
        #when user is on last page
        elif(page==last):
            prev = "/?page=" + str(page-1)
            next = "#"
        else:
            prev = "/?page=" + str(page - 1)
            next = "/?page=" + str(page + 1)
    
        #posts = Posts.query.filter_by().all()[0:params['no_of_posts']]
        return render_template('index.html', params = params , posts =posts , prev = prev , next = next )
    
    @app.route("/post/<string:post_slug>",methods = ['GET'])
    def post_route(post_slug):
        post = Posts.query.filter_by(slug = post_slug).first()
        return render_template('post.html',params=params, post=post)
    
    
    
    @app.route("/about")
    def about():
        return render_template('about.html', params=params)
    
    @app.route("/logout")
    def logout():
        session.pop('user')
        return redirect('/dashboard')
    
    @app.route("/contact", methods=['GET', 'POST'])
    def contact():
        if (request.method == 'POST'):
            name = request.form.get('name')
            email = request.form.get('email')
            phone = request.form.get('phone')
            message = request.form.get('message')
            entry = Contacts(name=name, phone_num=phone, msg=message, date=datetime.now(), email=email)
            db.session.add(entry)
            db.session.commit()
            mail.send_message('New message from blog',
                              sender = email,
                              recipients = [params['gmail-user']],
                              body = message + "\n" + phone
                              )
        return render_template('contact.html', params=params)
    
    
    @app.route("/dashboard" , methods = ['GET','POST'])
    def dashboard():
        if 'user' in session and session['user'] == params['admin_user'] :
            posts = Posts.query.all()
            return render_template('dashboard.html',posts = posts)
        #check if the admin is already logged in
    
    
        if request.method=='POST':
            username = request.form.get('uname')
            userpass = request.form.get('pass')
            if(username == params['admin_user'] and userpass == params['admin_password']):
                #set the session variable
                session['user'] = username
                posts = Posts.query.all()
                return render_template('dashboard.html',params = params ,posts= posts)
    
            #REDIRECT TO ADMIN PANEL
            else:
               return render_template('login.html', params=params)
    
    @app.route("/delete/<string:sno>" , methods = ['GET','POST'])
    def delete(sno):
        if 'user' in session and session['user'] == params['admin_user']:
            post = Posts.query.filter_by(sno=sno).first()
            db.session.delete(post)
            db.session.commit()
        return redirect('/dashboard')
    
    
    @app.route("/uploader", methods=['GET', 'POST'])
    def uploader():
        if ("user" in session and session['user'] == params['admin_user']):
            if(request.method == 'POST'):
                f = request.files['file1']
                f.save(os.path.join(app.config['UPLOAD_FOLDER'],secure_filename(f.filename)))
                return "Uploaded successfully"
    
    
    @app.route("/edit/<string:sno>", methods=['GET', 'POST'])
    def edit(sno):
        if ("user" in session and session['user'] == params['admin_user']):
            if request.method == "POST":
                box_title = request.form.get('title')
                tline = request.form.get('tagline')
                slug = request.form.get('slug')
                content = request.form.get('content')
                img_file = request.form.get('img_file')
                date = datetime.now()
    
                if sno == '0':
                    post = Posts(title=box_title, slug=slug, content=content, tagline=tline, img_file=img_file, date=date)
                    db.session.add(post)
                    db.session.commit()
                else:
                    post=Posts.query.filter_by(sno=sno).first()
                    post.title = box_title
                    post.slug  = slug
                    post.content = content
                    post.tagline = tline
                    post.img_file = img_file
                    post.date = date
                    db.session.commit()
                    return redirect('/edit/'+sno)
    
            post = Posts.query.filter_by(sno=sno).first()
            return render_template('edit.html', params = params,post = post,sno=sno )
    
    app.run(debug=True)
    
  2. 构建日志

    021-04-22T10:06:26.320935+00:00 app[web.1]: ModuleNotFoundError: No module named 'app'
    2021-04-22T10:06:26.320999+00:00 app[web.1]: [2021-04-22 10:06:26 +0000] [8] [INFO] Worker exiting (pid: 8)
    2021-04-22T10:06:26.344420+00:00 app[web.1]: Traceback (most recent call last):
    2021-04-22T10:06:26.344423+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/arbiter.py", line 202, in run
    2021-04-22T10:06:26.344617+00:00 app[web.1]: self.manage_workers()
    2021-04-22T10:06:26.344620+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/arbiter.py", line 551, in manage_workers
    2021-04-22T10:06:26.344765+00:00 app[web.1]: self.spawn_workers()
    2021-04-22T10:06:26.344768+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/arbiter.py", line 623, in spawn_workers
    2021-04-22T10:06:26.344907+00:00 app[web.1]: time.sleep(0.1 * random.random())
    2021-04-22T10:06:26.344910+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/arbiter.py", line 242, in handle_chld
    2021-04-22T10:06:26.344999+00:00 app[web.1]: self.reap_workers()
    2021-04-22T10:06:26.344999+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/arbiter.py", line 525, in reap_workers
    2021-04-22T10:06:26.345124+00:00 app[web.1]: raise HaltServer(reason, self.WORKER_BOOT_ERROR)
    2021-04-22T10:06:26.345165+00:00 app[web.1]: gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
    2021-04-22T10:06:26.345173+00:00 app[web.1]:
    2021-04-22T10:06:26.345173+00:00 app[web.1]: During handling of the above exception, another exception occurred:
    2021-04-22T10:06:26.345173+00:00 app[web.1]:
    2021-04-22T10:06:26.345176+00:00 app[web.1]: Traceback (most recent call last):
    2021-04-22T10:06:26.345179+00:00 app[web.1]: File "/app/.heroku/python/bin/gunicorn", line 8, in <module>
    2021-04-22T10:06:26.345221+00:00 app[web.1]: sys.exit(run())
    2021-04-22T10:06:26.345228+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 67, in run
    2021-04-22T10:06:26.345283+00:00 app[web.1]: WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
    2021-04-22T10:06:26.345285+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/app/base.py", line 231, in run
    2021-04-22T10:06:26.345370+00:00 app[web.1]: super().run()
    2021-04-22T10:06:26.345387+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/app/base.py", line 72, in run
    2021-04-22T10:06:26.345437+00:00 app[web.1]: Arbiter(self).run()
    2021-04-22T10:06:26.345449+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/arbiter.py", line 229, in run
    2021-04-22T10:06:26.345528+00:00 app[web.1]: self.halt(reason=inst.reason, exit_status=inst.exit_status)
    2021-04-22T10:06:26.345530+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/arbiter.py", line 342, in halt
    2021-04-22T10:06:26.345635+00:00 app[web.1]: self.stop()
    2021-04-22T10:06:26.345637+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/arbiter.py", line 393, in stop
    2021-04-22T10:06:26.345782+00:00 app[web.1]: time.sleep(0.1)
    2021-04-22T10:06:26.345786+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/arbiter.py", line 242, in handle_chld
    2021-04-22T10:06:26.345855+00:00 app[web.1]: self.reap_workers()
    2021-04-22T10:06:26.345858+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/arbiter.py", line 525, in reap_workers
    2021-04-22T10:06:26.345976+00:00 app[web.1]: raise HaltServer(reason, self.WORKER_BOOT_ERROR)
    2021-04-22T10:06:26.345992+00:00 app[web.1]: gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
    2021-04-22T10:06:26.401569+00:00 heroku[web.1]: Process exited with status 1
    2021-04-22T10:06:26.494132+00:00 heroku[web.1]: State changed from starting to crashed
    2021-04-22T10:52:27.200311+00:00 heroku[web.1]: State changed from crashed to starting
    2021-04-22T10:52:32.303098+00:00 heroku[web.1]: Starting process with command `gunicorn app:main`
    2021-04-22T10:52:35.765500+00:00 app[web.1]: [2021-04-22 10:52:35 +0000] [4] [INFO] Starting gunicorn 20.1.0
    2021-04-22T10:52:35.765624+00:00 app[web.1]: [2021-04-22 10:52:35 +0000] [4] [INFO] Listening at: http://0.0.0.0:26129 (4)
    2021-04-22T10:52:35.765700+00:00 app[web.1]: [2021-04-22 10:52:35 +0000] [4] [INFO] Using worker: sync
    2021-04-22T10:52:35.775598+00:00 app[web.1]: [2021-04-22 10:52:35 +0000] [7] [INFO] Booting worker with pid: 7
    2021-04-22T10:52:35.775902+00:00 app[web.1]: [2021-04-22 10:52:35 +0000] [8] [INFO] Booting worker with pid: 8
    2021-04-22T10:52:35.779140+00:00 app[web.1]: [2021-04-22 10:52:35 +0000] [7] [ERROR] Exception in worker process
    2021-04-22T10:52:35.779141+00:00 app[web.1]: Traceback (most recent call last):
    2021-04-22T10:52:35.779149+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
    2021-04-22T10:52:35.779150+00:00 app[web.1]: worker.init_process()
    2021-04-22T10:52:35.779150+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/workers/base.py", line 134, in init_process
    2021-04-22T10:52:35.779151+00:00 app[web.1]: self.load_wsgi()
    2021-04-22T10:52:35.779151+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
    2021-04-22T10:52:35.779151+00:00 app[web.1]: self.wsgi = self.app.wsgi()
    2021-04-22T10:52:35.779151+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/app/base.py", line 67, in wsgi
    2021-04-22T10:52:35.779152+00:00 app[web.1]: self.callable = self.load()
    2021-04-22T10:52:35.779152+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
    2021-04-22T10:52:35.779152+00:00 app[web.1]: return self.load_wsgiapp()
    2021-04-22T10:52:35.779153+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
    2021-04-22T10:52:35.779153+00:00 app[web.1]: return util.import_app(self.app_uri)
    2021-04-22T10:52:35.779153+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/util.py", line 359, in import_app
    2021-04-22T10:52:35.779154+00:00 app[web.1]: mod = importlib.import_module(module)
    2021-04-22T10:52:35.779154+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/importlib/__init__.py", line 127, in import_module
    2021-04-22T10:52:35.779154+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
    2021-04-22T10:52:35.779155+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
    2021-04-22T10:52:35.779155+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
    2021-04-22T10:52:35.779155+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
    2021-04-22T10:52:35.779156+00:00 app[web.1]: ModuleNotFoundError: No module named 'app'
    2021-04-22T10:52:35.779236+00:00 app[web.1]: [2021-04-22 10:52:35 +0000] [7] [INFO] Worker exiting (pid: 7)
    2021-04-22T10:52:35.782185+00:00 app[web.1]: [2021-04-22 10:52:35 +0000] [8] [ERROR] Exception in worker process
    2021-04-22T10:52:35.782186+00:00 app[web.1]: Traceback (most recent call last):
    2021-04-22T10:52:35.782189+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
    2021-04-22T10:52:35.782189+00:00 app[web.1]: worker.init_process()
    2021-04-22T10:52:35.782189+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/workers/base.py", line 134, in init_process
    2021-04-22T10:52:35.782190+00:00 app[web.1]: self.load_wsgi()
    2021-04-22T10:52:35.782190+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
    2021-04-22T10:52:35.782190+00:00 app[web.1]: self.wsgi = self.app.wsgi()
    2021-04-22T10:52:35.782191+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/app/base.py", line 67, in wsgi
    2021-04-22T10:52:35.782191+00:00 app[web.1]: self.callable = self.load()
    2021-04-22T10:52:35.782192+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
    2021-04-22T10:52:35.782192+00:00 app[web.1]: return self.load_wsgiapp()
    2021-04-22T10:52:35.782192+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
    2021-04-22T10:52:35.782193+00:00 app[web.1]: return util.import_app(self.app_uri)
    2021-04-22T10:52:35.782193+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/gunicorn/util.py", line 359, in import_app
    2021-04-22T10:52:35.782194+00:00 app[web.1]: mod = importlib.import_module(module)
    2021-04-22T10:52:35.782194+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/importlib/__init__.py", line 127, in import_module
    2021-04-22T10:52:35.782194+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
    2021-04-22T10:52:35.782195+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
    2021-04-22T10:52:35.782195+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
    2021-04-22T10:52:35.782195+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
    2021-04-22T10:52:35.782196+00:00 app[web.1]: ModuleNotFoundError: No module named 'app'
    2021-04-22T10:52:35.786188+00:00 app[web.1]: [2021-04-22 10:52:35 +0000] [8] [INFO] Worker exiting (pid: 8)
    2021-04-22T10:52:35.831703+00:00 app[web.1]: [2021-04-22 10:52:35 +0000] [4] [WARNING] Worker with pid 8 was terminated due to signal 15
    2021-04-22T10:52:35.927217+00:00 app[web.1]: [2021-04-22 10:52:35 +0000] [4] [INFO] Shutting down: Master
    2021-04-22T10:52:35.927266+00:00 app[web.1]: [2021-04-22 10:52:35 +0000] [4] [INFO] Reason: Worker failed to boot.
    2021-04-22T10:52:36.443389+00:00 heroku[web.1]: Process exited with status 3
    2021-04-22T10:52:36.637578+00:00 heroku[web.1]: State changed from starting to crashed
    2021-04-22T10:55:27.910059+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=cs-sansar.herokuapp.com request_id=af486d95-d3bc-463a-8181-3c88c66df999 fwd="59.97.255.75" dyno= connect= service= status=503 bytes= protocol=https
    2021-04-22T11:05:08.286594+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=cs-sansar.herokuapp.com request_id=051b33c9-4d95-4382-b49a-06b86b285692 fwd="59.97.255.75" dyno= connect= service= status=503 bytes= protocol=https
    2021-04-22T11:11:29.478766+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=cs-sansar.herokuapp.com request_id=c6819801-a01f-4ad4-8650-f252e4898a3b fwd="59.97.255.75" dyno= connect= service= status=503 bytes= protocol=https
    
  3. Config.json

    {
         "params":
         {
           "local_server": "True",
           "local_uri": "mysql+mysqlconnector://root:@localhost/cs-sansar",
           "prod_uri": "mysql+mysqlconnector://",
           "blog_name": "cs-sansar",
           "tag-line" : "Heaven for programmers",
           "gmail-user": "abc16@gmail.com",
           "gmail-password": "vxnv2",
           "about_text": "CS-SANSAR or the computer science world is the absolute and right place for the geeks who want to learn trending technologies. We at CS-SANSAR  provide you with efficient roadmaps to master any new tech.",
           "about_dev_text": "Hi everyone ! This is Vinayak . I like to blog with a deep passion for learning and tutoring latest technology.",
           "no_of_posts": 2,
           "login_image": "login.jpg",
           "admin_user" : "admin_user",
           "admin_password": "admin@123",
           "upload_location": "C:\\Users\\asus\\PycharmProjects\\Flask-blog\\static\\img"
    
         }
       }
    

还有如何在 config.json 中正确设置生产 URL?

1 个答案:

答案 0 :(得分:0)

我认为您没有包含 Procfile 。 在终端写这个

pip install gunicorn

转到requirements.txt并添加gunicorn==(gunicorn版本)

然后在根文件夹中制作一个Procfile(P应该是大写)并添加这个

web: gunicorn main:app

推送到 heroku git

相关问题