Shinyproxy: Masalah dengan dasbor penyebaran > 1.1 di Shinyproxy 2.3.1

Dibuat pada 25 Sep 2020  ·  9Komentar  ·  Sumber: openanalytics/shinyproxy

Hai komunitas,

Saya mencoba menggunakan aplikasi tanda hubung (build terbaru) dengan Shinyproxy. Tampaknya dependensi tanda hubung/tanda hubung terakhir yang berhasil dibuat daripada yang dapat bekerja dengan Shinyproxy adalah:

tanda hubung 1.1.1
dash-bootstrap-components 0.7.1
komponen inti-dasbor 1.1.1
dash-html-components 1.0.0
dash-renderer 1.0.0
tabel dasbor 4.1.0

Saya telah mencoba beberapa perbaikan untuk meluncurkannya tanpa hasil, tidak ada yang berfungsi dengan Dash > 1.1.0. Saya menambahkan solusi yang diketahui yang telah saya coba sejauh ini:

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

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

Saya memang mencoba memasukkan __name__ dan/atau mengecualikan external_stylesheets
Saya juga mencoba tanpa hasil untuk memindahkan permintaan di dalam config.update :

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

Sebagai referensi, solusi ini selalu mengakibatkan tidak ada komponen yang dimuat:

[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

Saya akan menghargai bantuan apa pun dengan masalah ini.

enhancement

Komentar yang paling membantu

Saya melihat sekarang bahwa solusi ini eksklusif untuk> 1.1 dan bukan solusi umum untuk semua versi tanda hubung.

Saya sekarang telah mereproduksi perbaikan ini dengan dash-demo dan aplikasi kedua yang lebih kompleks. Terima kasih banyak atas bantuan Anda.

Semua 9 komentar

PEMBARUAN: Dash 1.17.0 dan ShinyProxy 2.4.1 tampaknya telah berhasil.
Hanya membutuhkan:

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

Saya tidak dapat mereproduksi perbaikan ini dengan Dash 1.17.0 dan ShinyProxy 2.4.1. Demo Dash berfungsi dengan baik dengan versi Dash yang lebih lama, tetapi tidak jelas bagi saya bagaimana solusi di atas harus diterapkan untuk Demo Dash:

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

Bisakah Anda memberikan beberapa detail lebih lanjut?

PEMBARUAN: Dash 1.17.0 dan ShinyProxy 2.4.1 tampaknya telah berhasil.
Hanya membutuhkan:

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

Hai @jtpoirier

Saat membuat aplikasi Dash, Anda dapat menentukan beberapa parameter. Agar Dash berfungsi dengan baik dengan ShinyProxy, Anda harus menentukan dua parameter, dengan nilai yang sama. Parameter ini adalah:

  • routes_pathname_prefix
  • requests_pathname_prefix

Nilai parameter ini harus sebagai berikut:

/app_direct/<appname>/

Anda harus mengganti appname dengan id aplikasi yang menggunakan Dash. Untuk memperjelas ini, berikut adalah contoh lengkapnya:
Katakanlah Anda memiliki file application.yml berikut:

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

Maka id aplikasinya adalah dash-demo , dan dengan demikian nilai parameternya menjadi:

/app_direct/dash-demo/

Jadi di bagian atas aplikasi dasbor Anda, Anda mungkin akan memiliki kode python berikut:

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

Saya harap ini jelas dan membantu. Semoga beruntung!

Hai @jfrubioz

Kami membuat perubahan yang akan disertakan dalam rilis ShinyProxy berikutnya untuk mempermudah bekerja dengan aplikasi Dash. Sejak rilis itu, setiap aplikasi ShinyProxy akan memiliki variabel lingkungan SHINYPROXY_PUBLIC_PATH yang pada dasarnya berisi nilai yang Anda tentukan dalam solusi Anda. Untuk contoh di atas yang akan menjadi /app_direct/dash-demo/ .
Keuntungannya adalah Anda dapat membuat aplikasi Dash Anda independen pada nama aplikasi yang digunakan di ShinyProxy.
BTW: kami juga akan menyediakan cara untuk mengikat nilai ini ke variabel lingkungan apa pun, sekali lagi untuk membuat aplikasi lebih independen dari ShinyProxy.

Terima kasih atas tanggapan yang cepat. Sepertinya peningkatan yang Anda rencanakan akan membantu.

Kode di atas tampaknya tidak berhasil meluncurkan demo dasbor dengan versi terbaru Dash, kemungkinan karena beberapa alasan. "server" tidak ditentukan di dasbor-demo app.py, jadi tidak akan berjalan. Jika baris itu dihapus, aplikasi akan mulai di baris perintah seperti di bawah ini, tetapi wadah tidak akan pernah merespons tepat waktu melalui antarmuka web. Agar jelas, demo dasbor berfungsi dengan baik di lingkungan ini dengan tanda hubung 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

Ya, saya menyadari bahwa saya tidak menyertakan referensi ke server. Saya memperbarui pembaruan untuk memasukkan baris server = flask.Flask(__name__) . Pastikan Anda mengimpor labu ke modul Anda.

Seperti yang dijelaskan @LEDfan , solusinya hanya bergantung pada menambahkan '/ app_direct/dash-demo/' ke 'requests_pathname_prefix' Anda. Tapi saya rasa Anda tidak perlu memasukkannya ke 'routes_pathname_prefix' juga. Karenanya, saya hanya akan memastikan kode python Anda terlihat seperti ini:

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

Dimulai dengan rilis demo dasbor terbaru, saya mengganti baris 'app=dash.Dash()' dengan kode di bawah ini seperti yang disarankan. Sekali lagi server akan berjalan di baris perintah tetapi waktu habis saat diluncurkan dari glossyproxy. Saya mengonfirmasi bahwa id aplikasi adalah 'dash-demo' di file application.yml saya.

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

Saya melihat sekarang bahwa solusi ini eksklusif untuk> 1.1 dan bukan solusi umum untuk semua versi tanda hubung.

Saya sekarang telah mereproduksi perbaikan ini dengan dash-demo dan aplikasi kedua yang lebih kompleks. Terima kasih banyak atas bantuan Anda.

Hai @jtpoirier , senang Anda berhasil menyelesaikan masalah!

@jfrubioz kami merilis ShinyProxy 2.5.0 di mana setiap wadah sekarang memiliki lingkungan SHINYPROXY_PUBLIC_PATH . Seperti yang Anda lihat di demo kami , sekarang seharusnya lebih mudah untuk mendukung versi Dash yang lebih baru.
Terima kasih telah memberikan solusi kepada kami!

Karena ini sudah diperbaiki sekarang, saya menutup masalah ini. Seperti biasa, jangan ragu untuk membuka edisi baru jika Anda menemui masalah.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

jat255 picture jat255  ·  4Komentar

xtrasimplicity picture xtrasimplicity  ·  5Komentar

Bertusian picture Bertusian  ·  5Komentar

fmmattioni picture fmmattioni  ·  3Komentar

lucius-verus-fan picture lucius-verus-fan  ·  7Komentar