Hallo Gemeinde,
Ich versuche, eine Dash-App (neueste Version) mit Shinyproxy bereitzustellen. Es scheint, dass die letzten erfolgreichen Strich/Strich-Abhängigkeiten, die mit Shinyproxy funktionieren, folgende sind:
Bindestrich 1.1.1
Dash-Bootstrap-Komponenten 0.7.1
Dash-Core-Komponenten 1.1.1
dash-html-komponenten 1.0.0
Dash-Renderer 1.0.0
Dash-Tabelle 4.1.0
Ich habe ein paar Fixes ausprobiert, um es ohne Glück zu starten, von denen keine mit Dash > 1.1.0 funktioniert. Ich füge die bekannten Lösungen hinzu, die ich bisher ausprobiert habe:
Methode 1:
app = dash.Dash(__name__, requests_pathname_prefix='/app_direct/dash-demo/')
Methode 2:
app = dash.Dash(external_stylesheets=[dbc.themes.BOOTSTRAP],
suppress_callback_exceptions=True,
prevent_initial_callbacks=True,
requests_pathname_prefix='/app_direct/<appname>')
#app.config.update({
# # remove the default of '/'
# 'routes_pathname_prefix': '',
# # remove the default of '/'
# 'requests_pathname_prefix': ''
# })
Ich habe versucht, __name__
und/oder external_stylesheets
auszuschließen
Ich habe auch erfolglos versucht, die Anfrage in das config.update
zu verschieben:
app.config.update({
# remove the default of '/'
'routes_pathname_prefix': '',
# remove the default of '/'
'requests_pathname_prefix': '/app_direct/<appname>/'
})
Als Referenz führen diese Lösungen immer dazu, dass keine dieser Komponenten geladen wird:
[email protected]_6_0m1598451932.8.7.min.js
[email protected]_6_0m1598451932.13.0.min.js
[email protected]_6_0m1598451932.13.0.min.js
[email protected]_6_0m1598451932.7.2.min.js
dash_bootstrap_components.v0_10_3m1598451933.min.js
bundle.v4_9_0m1598451932.js
dash_html_components.v1_0_3m1598451932.min.js
dash_core_components.v1_10_2m1598451932.min.js
dash_core_components-shared.v1_10_2m1598451932.js
dash_renderer.v1_6_0m1598451932.min.js
[email protected]_6_0m1598451932.13.0.min.js
[email protected]_6_0m1598451932.7.2.min.js
dash_bootstrap_components.v0_10_3m1598451933.min.js
bundle.v4_9_0m1598451932.js
dash_html_components.v1_0_3m1598451932.min.js
dash_core_components.v1_10_2m1598451932.min.js
dash_core_components-shared.v1_10_2m1598451932.js
dash_renderer.v1_6_0m1598451932.min.js
Ich würde mich über jede Hilfe bei diesem Problem freuen.
UPDATE: Dash 1.17.0 und ShinyProxy 2.4.1 scheinen es geschafft zu haben.
Benötigt nur:
server = flask.Flask(__name__)
app = dash.Dash(
__name__,
external_stylesheets=[dbc.themes.BOOTSTRAP],
suppress_callback_exceptions=True,
server = server,
requests_pathname_prefix='/app_direct/<appname>/'
)
Ich kann diesen Fix mit Dash 1.17.0 und ShinyProxy 2.4.1 nicht reproduzieren. Die Dash-Demo funktioniert gut mit älteren Dash-Versionen, aber mir ist nicht klar, wie die obige Lösung für die Dash-Demo implementiert werden soll:
https://github.com/openanalytics/shinyproxy-dash-demo
Können Sie weitere Einzelheiten angeben?
UPDATE: Dash 1.17.0 und ShinyProxy 2.4.1 scheinen es geschafft zu haben.
Benötigt nur:app = dash.Dash( __name__, external_stylesheets=[dbc.themes.BOOTSTRAP], suppress_callback_exceptions=True, server = server, requests_pathname_prefix='/app_direct/<appname>/' )
Hallo @jtpoirier
Beim Erstellen einer Dash-Anwendung können Sie einige Parameter angeben. Damit Dash ordnungsgemäß mit ShinyProxy funktioniert, müssen Sie zwei Parameter mit demselben Wert angeben. Diese Parameter sind:
routes_pathname_prefix
requests_pathname_prefix
Der Wert dieser Parameter sollte wie folgt sein:
/app_direct/<appname>/
Sie müssen appname
durch die ID der App ersetzen, die Dash verwendet. Um dies zu verdeutlichen, hier ein vollständiges Beispiel:
Angenommen, Sie haben die folgende application.yml
-Datei:
proxy:
title: Open Analytics Shiny Proxy
logo-url: https://www.openanalytics.eu/shinyproxy/logo.png
landing-page: /
heartbeat-rate: 10000
heartbeat-timeout: 60000
port: 8080
authentication: simple
admin-groups: scientists
users:
- name: jack
password: password
groups: scientists
- name: jeff
password: password
groups: mathematicians
docker:
cert-path: /home/none
url: http://localhost:2375
port-range-start: 20000
specs:
- id: dash-demo # Note: this is the id of the application
display-name: Dash Demo Application
port: 8050
container-cmd: ["python", "app.py"]
container-image: openanalytics/shinyproxy-dash-demo
Dann ist die ID der Anwendung dash-demo
, und somit wird der Wert des Parameters zu:
/app_direct/dash-demo/
Oben in Ihrer Dash-Anwendung haben Sie wahrscheinlich den folgenden Python-Code:
app = dash.Dash(
__name__,
external_stylesheets=[dbc.themes.BOOTSTRAP],
suppress_callback_exceptions=True,
server = server,
requests_pathname_prefix='/app_direct/dash-demo/',
routes_pathname_prefix='/app_direct/dash-demo/'
)
Ich hoffe das ist verständlich und hilft. Viel Glück!
Hallo @jfrubioz
Wir haben eine Änderung vorgenommen, die in der nächsten ShinyProxy-Version enthalten sein wird, um die Arbeit mit Dash-Apps zu vereinfachen. Ab dieser Version hat jede ShinyProxy-App eine Umgebungsvariable SHINYPROXY_PUBLIC_PATH
, die im Grunde den Wert enthält, den Sie in Ihrer Problemumgehung angegeben haben. Für das obige Beispiel wäre das also /app_direct/dash-demo/
.
Der Vorteil ist, dass Sie Ihre Dash-Anwendungen unabhängig von dem in ShinyProxy verwendeten App-Namen machen können.
Übrigens: Wir werden auch eine Möglichkeit bieten, diesen Wert an eine beliebige Umgebungsvariable zu binden, um Apps wiederum unabhängiger von ShinyProxy zu machen.
Danke für die schnellen Antworten. Es hört sich so an, als würde Ihre geplante Verbesserung helfen.
Der obige Code scheint dash-demo mit der neuesten Version von Dash nicht erfolgreich zu starten, möglicherweise aus mehreren Gründen. "server" ist in der dash-demo app.py nicht definiert, daher wird es nicht ausgeführt. Wenn diese Zeile entfernt wird, startet die App in der Befehlszeile wie unten, aber der Container antwortet nie rechtzeitig über die Webschnittstelle. Um es klar zu sagen, die Dash-Demo funktioniert in dieser Umgebung gut mit Dash ≤ 1.1.
Running on http://0.0.0.0:8050/app_direct/dash-demo/
Debugger PIN: 394-772-284
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
Running on http://0.0.0.0:8050/app_direct/dash-demo/
Debugger PIN: 807-835-959
@jtpoirier
Ja, mir ist aufgefallen, dass ich keinen Verweis auf den Server eingefügt habe. Ich habe das Update so aktualisiert, dass es die Zeile server = flask.Flask(__name__)
enthält. Stellen Sie sicher, dass Sie die Flasche in Ihr Modul importieren.
Wie @LEDfan erklärte, beruht die Lösung einfach auf dem Hinzufügen von „/app_direct/dash-demo/“ zu Ihrem „requests_pathname_prefix“. Aber ich glaube nicht, dass Sie es auch in 'routes_pathname_prefix' eingeben müssen. Daher würde ich nur sicherstellen, dass Ihr Python-Code so aussieht:
app = dash.Dash(
__name__,
external_stylesheets=[dbc.themes.BOOTSTRAP],
suppress_callback_exceptions=True,
server = flask.Flask(__name__),
requests_pathname_prefix='/app_direct/dash-demo/',
)
if __name__ == '__main__':
app.run_server(
#make sure you have the right host address
#host = '0.0.0.0',
)
Beginnend mit der neuesten Dash-Demo-Version habe ich die Zeile „app=dash.Dash()“ wie vorgeschlagen durch den folgenden Code ersetzt. Auch hier wird der Server in der Befehlszeile ausgeführt, aber wenn er von Shinyproxy gestartet wird, läuft das Zeitlimit ab. Ich bestätige, dass die ID der App in meiner Datei „application.yml“ „dash-demo“ lautet.
import flask
app = dash.Dash(
__name__,
suppress_callback_exceptions=True,
server=flask.Flask(__name__),
requests_pathname_prefix='/app_direct/dash-demo/'
)
if __name__ == '__main__':
app.run_server(debug=True, host = '0.0.0.0')
Ich sehe jetzt, dass diese Lösung exklusiv für> 1.1 ist und keine allgemeine Lösung für alle Versionen von Dash.
Ich habe diesen Fix jetzt mit Dash-Demo und einer zweiten komplexeren Anwendung reproduziert. Vielen Dank für Ihre Hilfe.
Hallo @jtpoirier , toll, dass du das Problem lösen konntest!
@jfrubioz wir haben ShinyProxy 2.5.0 veröffentlicht, in dem jeder Container jetzt die Umgebung SHINYPROXY_PUBLIC_PATH
hat. Wie Sie in unserer Demo sehen können, sollte es jetzt einfacher sein, neuere Dash-Versionen zu unterstützen.
Vielen Dank, dass Sie uns die Lösung beigesteuert haben!
Da dies nun behoben ist, schließe ich dieses Thema. Fühlen Sie sich wie immer frei, ein neues Problem zu eröffnen, wenn Sie auf ein Problem stoßen.
Hilfreichster Kommentar
Ich sehe jetzt, dass diese Lösung exklusiv für> 1.1 ist und keine allgemeine Lösung für alle Versionen von Dash.
Ich habe diesen Fix jetzt mit Dash-Demo und einer zweiten komplexeren Anwendung reproduziert. Vielen Dank für Ihre Hilfe.