Shinyproxy: Shinyproxy2.3.​​1でのdeploydash> 1.1の問題

作成日 2020年09月25日  ·  9コメント  ·  ソース: openanalytics/shinyproxy

こんにちはコミュニティ、

Shinyproxyでダッシュ(最新ビルド)アプリをデプロイしようとしています。 Shinyproxyで機能するよりも構築された最後の成功したダッシュ/ダッシュ依存関係は次のようです:

ダッシュ1.1.1
dash-bootstrap-components 0.7.1
ダッシュコアコンポーネント1.1.1
dash-html-components 1.0.0
ダッシュレンダラー1.0.0
ダッシュテーブル4.1.0

私は運がなくて起動するためにいくつかの修正を試みましたが、どちらもDash> 1.1.0では機能しません。 これまでに試した既知のソリューションを追加します。

方法1:
app = dash.Dash(__name__, requests_pathname_prefix='/app_direct/dash-demo/')

方法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': ''
#    })

__name__を含めたり、 external_stylesheetsを除外したりしました
また、リクエストをconfig.update内に移動しようとしましたが成功しませんでした:

app.config.update({
         # remove the default of '/'
         'routes_pathname_prefix': '',
         # remove the default of '/'
         'requests_pathname_prefix': '/app_direct/<appname>/'
})

参考までに、これらのソリューションでは、常にこのコンポーネントが読み込まれることはありません。

[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

この問題についてサポートをいただければ幸いです。

enhancement

最も参考になるコメント

このソリューションは> 1.1専用であり、すべてのバージョンのdashの一般的なソリューションではないことがわかりました。

この修正をダッシュ​​デモと2番目のより複雑なアプリケーションで再現しました。 ご協力ありがとうございます。

全てのコメント9件

更新:Dash1.17.0とShinyProxy2.4.1がうまくいったようです。
必要なもの:

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>/'
)

Dash1.17.0とShinyProxy2.4.1ではこの修正を再現できません。 Dashデモは、古いバージョンのDashで正常に機能しますが、上記のソリューションをDashデモにどのように実装する必要があるかはわかりません。

https://github.com/openanalytics/shinyproxy-dash-demo

詳細を教えてください。

更新:Dash1.17.0とShinyProxy2.4.1がうまくいったようです。
必要なもの:

app = dash.Dash(
    __name__, 
    external_stylesheets=[dbc.themes.BOOTSTRAP], 
    suppress_callback_exceptions=True,
    server = server,
    requests_pathname_prefix='/app_direct/<appname>/'
)

こんにちは@jtpoirier

Dashアプリケーションを作成するときに、いくつかのパラメーターを指定できます。 DashをShinyProxyで正しく機能させるには、同じ値で2つのパラメーターを指定する必要があります。 これらのパラメータは次のとおりです。

  • routes_pathname_prefix
  • requests_pathname_prefix

これらのパラメーターの値は次のようになります。

/app_direct/<appname>/

appnameをDashを使用するアプリのIDに置き換える必要があります。 これを明確にするために、ここに完全な例があります:
次のapplication.ymlファイルがあるとします。

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

この場合、アプリケーションのIDはdash-demoであるため、パラメーターの値は次のようになります。

/app_direct/dash-demo/

したがって、ダッシュアプ​​リケーションの上部には、おそらく次のPythonコードがあります。

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/'
)

これが明確で役立つことを願っています。 幸運を!

こんにちは@jfrubioz

Dashアプリの操作を簡単にするために、次のShinyProxyリリースに含まれる変更を加えました。 そのリリース以降、すべてのShinyProxyアプリには、回避策で指定した値を基本的に含む環境変数SHINYPROXY_PUBLIC_PATHが含まれるようになります。 上記の例では、したがって/app_direct/dash-demo/になります。
利点は、DashアプリケーションをShinyProxyで使用されるアプリ名に依存しないようにできることです。
ところで、この値を任意の環境変数にバインドして、アプリをShinyProxyからより独立させる方法も提供します。

迅速な対応に感謝します。 計画された改善が役立つようです。

上記のコードは、いくつかの理由により、最新バージョンのDashでdash-demoを正常に起動しないようです。 「サーバー」はdash-demoapp.pyで定義されていないため、実行されません。 その行が削除されると、アプリは以下のようにコマンドラインで起動しますが、コンテナーはWebインターフェイスを介して時間内に応答しません。 明確にするために、ダッシュデモはダッシュ≤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

はい、サーバーへの参照が含まれていないことに気付きました。 server = flask.Flask(__name__)行を含むように更新を更新しました。 フラスコをモジュールにインポートしてください。

@LEDfanが説明したように、このソリューションは、「requests_pathname_prefix」に「/ app_direct / dash-demo /」を追加するだけです。 ただし、「routes_pathname_prefix」にも入力する必要はないと思います。 したがって、Pythonコードが次のようになっていることを確認します。

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',
    )

最新のダッシュデモリリースから、提案されているように、行 'app = dash.Dash()'を以下のコードに置き換えました。 この場合も、サーバーはコマンドラインで実行されますが、shinyproxyから起動するとタイムアウトになります。 application.ymlファイルでアプリのIDが「dash-demo」であることを確認しました。

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')

このソリューションは> 1.1専用であり、すべてのバージョンのdashの一般的なソリューションではないことがわかりました。

この修正をダッシュ​​デモと2番目のより複雑なアプリケーションで再現しました。 ご協力ありがとうございます。

こんにちは@jtpoirier 、あなたが問題を解決することができて素晴らしいです!

@jfrubiozは、各コンテナがSHINYPROXY_PUBLIC_PATH環境を持つShinyProxy2.5.0をリリースしました。 デモでわかるように、新しいDashバージョンのサポートが簡単になっているはずです。
私たちにソリューションを提供していただきありがとうございます!

これは現在修正されているので、この問題を解決します。 いつものように、何か問題が発生した場合は、新しい問題を開いてください。

このページは役に立ちましたか?
0 / 5 - 0 評価