Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flask 为什么可以';t heroku运行我的烧瓶应用程序。找不到属性应用程序,然后输出错误代码H10_Flask_Heroku - Fatal编程技术网

Flask 为什么可以';t heroku运行我的烧瓶应用程序。找不到属性应用程序,然后输出错误代码H10

Flask 为什么可以';t heroku运行我的烧瓶应用程序。找不到属性应用程序,然后输出错误代码H10,flask,heroku,Flask,Heroku,我已经按照如下方式设置了Procfile:web:gunicorn项目。main:app 文件夹的主要结构是: ├── DocumentTemplates ├── __pycache__ ├── project ├── venv ├── ASLtemplate\ (with\ highlighted\ fields).docx ├── ASLtemplate.docx ├── Procfile └── requirements.txt 包含应用程序文件(init.py)的项目文件夹的文件结构如

我已经按照如下方式设置了Procfile:
web:gunicorn项目。main:app

文件夹的主要结构是:

├── DocumentTemplates
├── __pycache__
├── project
├── venv
├── ASLtemplate\ (with\ highlighted\ fields).docx
├── ASLtemplate.docx
├── Procfile
└── requirements.txt
包含应用程序文件(init.py)的项目文件夹的文件结构如下:

├── ASLtemplate.docx
├── __init__.py
├── __pycache__
│   ├── __init__.cpython-37.pyc
│   ├── auth.cpython-37.pyc
│   ├── main.cpython-37.pyc
│   └── models.cpython-37.pyc
├── auth.py
├── db.sqlite
├── main.py
├── models.py
├── static
│   └── css
│       └── main.css
└── templates
    ├── asl.html
    ├── base.html
    ├── index.html
    ├── login.html
    ├── profile.html
    └── signup.html
def create_app():
    app = Flask(__name__)
我已经使用venv建立了一个虚拟环境

init.py设置如下:

├── ASLtemplate.docx
├── __init__.py
├── __pycache__
│   ├── __init__.cpython-37.pyc
│   ├── auth.cpython-37.pyc
│   ├── main.cpython-37.pyc
│   └── models.cpython-37.pyc
├── auth.py
├── db.sqlite
├── main.py
├── models.py
├── static
│   └── css
│       └── main.css
└── templates
    ├── asl.html
    ├── base.html
    ├── index.html
    ├── login.html
    ├── profile.html
    └── signup.html
def create_app():
    app = Flask(__name__)
以下是运行heroku日志的日志--tail:

这是main.py中的代码

from flask_login import login_required, current_user
from . import db
from os import environ
from flask import Flask, render_template, request, send_file, redirect, Blueprint
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, SelectField, IntegerField, TextAreaField
from wtforms.fields.html5 import DateField
from flask_sqlalchemy import SQLAlchemy
from wtforms.validators import DataRequired
from docx import Document
import jinja2
from docxtpl import DocxTemplate
from io import StringIO
import io
from flask_bootstrap import Bootstrap
from flask_pure import Pure

main = Blueprint('main', __name__)

class MyForm(FlaskForm):
    client_name=StringField('Client Contact', validators=[DataRequired()])
    client_job_title=StringField('Client Contact Job Title', validators=[DataRequired()])
    company_name=StringField('Company Name', validators=[DataRequired()])
    # client_name_upper=StringField('Client Contact Name Upper Case', validators=[DataRequired()])
    address_line_1=StringField('Address Line 1', validators=[DataRequired()])
    address_line_2=StringField('Address Line 2', validators=[DataRequired()])
    city_county_country=StringField('City, County, Country', validators=[DataRequired()])
    postcode=StringField('Post Code', validators=[DataRequired()])
    date=DateField('Date', validators=[DataRequired()], format='%Y-%m-%d')
    job_number=StringField('Job Number (4 digit)', validators=[DataRequired()])
    document_number=StringField('Document number e.g. 001', validators=[DataRequired()])
    lead_initials=StringField('Mabbett Lead Initials e.g. KB for Kieran Bruce', validators=[DataRequired()])
    supervisor_initials=StringField('Mabbett Supervisor e.g. PY for Paul Young', validators=[DataRequired()])
    supervisor_name=StringField('Mabbett Supervisor Name', validators=[DataRequired()])
    project_title=StringField('Project Title', validators=[DataRequired()])
    lead_name=StringField('Lead Mabbett Name', validators=[DataRequired()])
    service_type=StringField('Service Type', validators=[DataRequired()])
    company_short=StringField('Company Name Short Hand e.g. WG&S for William Grant & Sons Ltd ', validators=[DataRequired()])
    site_location=StringField('Site Location e.g. Girvan', validators=[DataRequired()])
    letter_agreement_date=StringField('Date of orginal letter agreement', validators=[DataRequired()])
    project_background=TextAreaField('Background', validators=[DataRequired()])
    taskA_title=StringField('Task A Title', validators=[DataRequired()])
    taskA_scope=TextAreaField('Task A Scope', validators=[DataRequired()])
    taskA_professional_fee=StringField('Task A Professional Fee', validators=[DataRequired()])
    taskA_reimbursable_fee=StringField('Task A Reimbursable Fee', validators=[DataRequired()])
    taskB_title=StringField('Task B Title', validators=[DataRequired()])
    taskB_scope=TextAreaField('Task B Scope', validators=[DataRequired()])
    taskB_professional_fee=StringField('Task B Professional Fee', validators=[DataRequired()])
    taskB_reimbursable_fee=StringField('Task B Reimbursable Fee', validators=[DataRequired()])
    taskC_title=StringField('Task C Title', validators=[DataRequired()])
    taskC_scope=TextAreaField('Task C Scope', validators=[DataRequired()])
    taskC_professional_fee=StringField('Task C Professional Fee', validators=[DataRequired()])
    taskC_reimbursable_fee=StringField('Task C Reimbursable Fee', validators=[DataRequired()])
    total_professional_fee=StringField('Total Professional Fee', validators=[DataRequired()])
    total_reimbursable_fee=StringField('Total Reimbursable Fee', validators=[DataRequired()])
    total_budget=StringField('Total Budget', validators=[DataRequired()])
    department_lead_name=StringField('Department Lead Name', validators=[DataRequired()])
    department_lead_job_title=StringField('Department Lead Job Title', validators=[DataRequired()])
    submit = SubmitField('Create your word file')


@main.route('/')
def index():
    return render_template('index.html')

@main.route('/profile')
@login_required
def profile():
    return render_template('profile.html', name=current_user.name)

@main.route('/asl', methods=('GET', 'POST'))
@login_required
def asl():
    # assigns form to the MyForm Class above
    form = MyForm()
    # assigns values from the form to the values in a dictionary.
    if form.is_submitted():
        result = request.form
        document = DocxTemplate('ASLtemplate.docx')
        context = { 
        'client_name':result['client_name'],
        'client_job_title':result['client_job_title'],
        'company_name':result['company_name'],
        # 'client_name_upper':result['client_name_upper'],
        'address_line_1':result['address_line_1'],
        'address_line_2':result['address_line_2'],
        'city_county_country':result['city_county_country'],
        'postcode':result['postcode'],
        'date':result['date'],
        'job_number':result['job_number'],
        'document_number':result['document_number'],
        'lead_initials':result['lead_initials'],
        'supervisor_initials':result['supervisor_initials'],
        'supervisor_name':result['supervisor_name'],
        'project_title':result['project_title'],
        'lead_name':result['lead_name'],
        'service_type':result['service_type'],
        'company_short':result['company_short'],
        'site_location':result['site_location'],
        'letter_agreement_date':result['letter_agreement_date'],
        'project_background':result['project_background'],
        'taskA_title':result['taskA_title'],
        'taskA_scope':result['taskA_scope'],
        'taskA_professional_fee':result['taskA_professional_fee'],
        'taskA_reimbursable_fee':result['taskA_reimbursable_fee'],
        'taskB_title':result['taskB_title'],
        'taskB_scope':result['taskB_scope'],
        'taskB_professional_fee':result['taskB_professional_fee'],
        'taskB_reimbursable_fee':result['taskB_reimbursable_fee'],
        'taskC_title':result['taskC_title'],
        'taskC_scope':result['taskC_scope'],
        'taskC_professional_fee':result['taskC_professional_fee'],
        'taskC_reimbursable_fee':result['taskC_reimbursable_fee'],
        'total_professional_fee':result['total_professional_fee'],
        'total_reimbursable_fee':result['total_reimbursable_fee'],
        'total_budget':result['total_budget'],
        'department_lead_name':result['department_lead_name'],
        'department_lead_job_title':result['department_lead_job_title']
        }
        # Handles the word templating
        document.render(context)
        file = io.BytesIO()
        document.save(file)
        file.seek(0)
        return send_file(file, attachment_filename=(result["job_number"]+ ".docx"), as_attachment=True)
    # blank form will be rendered when the url is visited. The form is based upon the html in the bsf html file 
    return render_template('asl.html', form=form)

查看将其指向不存在的
project.main.app()
的枪图标。基于以下条件,我相信如果您将调用更改为:

gunicorn "project:create_app()"

如果这不起作用,您必须提供一个“应在指定模块中找到的WSGI可调用文件”()。

Hey!查看日志,似乎会有一个错误日志。你能把错误日志的内容添加到你的问题中吗?我现在已经用日志更新了帖子。嘿,这很有帮助。请您也添加
project/uuu init_uuuuuuuuuuupy
project/main.py
的内容好吗?我现在已经添加了这两个文件中的代码。在这里你可以找到答案