使用 cPanel 部署 Python Dash 应用程序时出现问题

问题描述 投票:0回答:1

我是网络托管新手,正在尝试通过 cPanel 部署我的 多页 Python Dash 应用程序。我已经学习了多个教程并阅读了大量文档,包括尝试使用类似的 Flask 应用程序来应用方法,但没有成功。我可以从 PC 上的命令行正常运行该应用程序(输入

python app.py
);这些问题仅与部署有关。

应用程序目录结构概述:

- app.py
- data.csv #Read by the app.py file
- pages
   |-- page1.py
   |-- page2.py
   |-- page3.py
   |-- page4.py
   |-- page5.py
   |-- page6.py
   |-- page7.py
   |-- page8.py
- assets
   |-- image.png
   |-- favicon.ico
   |-- header.css
   |-- typography.css
- requirements.txt
- wsgi.py

app.py(摘要)

from dash import Dash, html, dcc, Input, Output
import dash_bootstrap_components as dbc
import dash
import pandas as pd
import numpy as np
import math
import datetime as dt
#from dash.exceptions import PreventUpdate

app = Dash(__name__, use_pages=True, 
           external_stylesheets = [dbc.themes.BOOTSTRAP])
server = app.server
app.scripts.config.serve_locally = True
app.css.config.serve_locally = True

#Read data
df = pd.read_csv('data.csv')

navbar = dbc.Nav(
    [
    dbc.NavLink([
        html.Div(page["name"], className = "ms-2"), 
        ],
        href = page["path"], 
        active = "exact",
        #active = True,
        )
        for page in dash.page_registry.values()
    ], 
    vertical = False, 
    pills = True, 
    className = "bg-light"
    )

body_app = dbc.Container([
# user-selected data is stored in the memory --> can be shared between callbacks and pages
    dcc.Store(id = "store-data",
              data = [], 
              storage_type = "memory"),
    dbc.Row([
        dbc.Col([
            navbar #Allows users to navigate between the pages
            ])
        ]),
    
    ### Rest of the app style ###

        ], fluid = True)

app.layout = html.Div(id = 'parent', children = [body_app])

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

需求.txt

(其他页面需要其中一些模块)

dash
dash_bootstrap_components
Dash
pandas
numpy
datetime
plotly
scikit-learn
dash-core-components
dash-html-components
dash-mantine-components
dash-table

wsgi.py

我对此经验较少,但我改编了我在网上找到的示例:

import sys

sys.path.insert(0,"/var/www/html/Dash/")
sys.path.insert(0,"/home/user/env/pweb/lib/python3.8/site-packages")
sys.path.insert(0,"/home/user/env/pweb")

from app import server as application

根据我在其他论坛中找到的提出类似问题的建议,但我看不到如何在 cPanel 中应用其中一些步骤(例如当我尝试this时)。在可能的情况下,我只会在我的应用程序上收到“我们很抱歉,但出了点问题”消息(例如当我尝试this时)。

我最接近部署它的是当我遵循这个 YouTube 教程(对于 Flask 应用程序)时,但我在我的应用程序上收到“从应用程序收到的响应不完整”消息,并在 Passenger.log 中出现以下错误:

App 3219615 output: /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.py:26: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
App 3219615 output:   import sys, os, re, imp, threading, signal, traceback, socket, select, struct, logging, errno
App 3219615 output: [ pid=3219615, time=2023-08-11 13:16:15,716 ]: WSGI application raised an exception!
App 3219615 output: Traceback (most recent call last):
App 3219615 output:   File "/opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.py", line 199, in main_loop
App 3219615 output:     socket_hijacked = self.process_request(env, input_stream, client)
App 3219615 output:   File "/opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.py", line 333, in process_request
App 3219615 output:     result = self.app(env, start_response)
App 3219615 output: TypeError: 'Dash' object is not callable

任何有关此问题的帮助将不胜感激!我还可以通过应用程序环境中的 cPanel 终端对应用程序进行更改,以防有任何用处。

python error-handling cpanel plotly-dash web-hosting
1个回答
0
投票

我也遇到了同样的问题,请问你找到解决办法了吗?

史蒂文

© www.soinside.com 2019 - 2024. All rights reserved.