Shinyproxy: рд╢рд╛рдЗрдиреАрдкреНрд░реЙрдХреНрд╕реА 2.3.1 . рдкрд░ рдбрд┐рдкреНрд▓реЙрдп рдбреИрд╢> 1.1 рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рд╕рд┐рддре░ 2020  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: openanalytics/shinyproxy

рд╣рд╛рдп рд╕рдореБрджрд╛рдп,

рдореИрдВ Shinyproxy рдХреЗ рд╕рд╛рде рдПрдХ рдбреИрд╢ (рдирд╡реАрдирддрдо рдмрд┐рд▓реНрдб) рдРрдк рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Shinyproxy рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдЕрдВрддрд┐рдо рд╕рдлрд▓ рдбреИрд╢/рдбреИрд╢ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ:

рдбреИрд╢ 1.1.1
рдбреИрд╢-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк-рдШрдЯрдХ 0.7.1
рдбреИрд╢-рдХреЛрд░-рдШрдЯрдХ 1.1.1
рдбреИрд╢-рдПрдЪрдЯреАрдПрдордПрд▓-рдШрдЯрдХ 1.0.0
рдбреИрд╢-рд░реЗрдВрдбрд░рд░ 1.0.0
рдбреИрд╢-рдЯреЗрдмрд▓ 4.1.0

рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реНрдордд рдХреЗ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реБрдзрд╛рд░реЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдбреИрд╢> 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>/'
})

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдЗрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрд╢рд╛ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдШрдЯрдХ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ:

рдкреЙрд▓реАрдлрд┐рд▓@7.v1_6_0m1598451932.8.7.min.js
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛@16.v1_6_0m1598451932.13.0.min.js
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреЛрдо@16.v1_6_0m1598451932.13.0.min.js
[email protected]_6_0m1598451932.7.2.min.js
рдбреИрд╢_рдмреВрдЯрд╕реНрдЯреНрд░реИрдк_рдШрдЯрдХ.v0_10_3m1598451933.min.js
рдмрдВрдбрд▓.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
рдбреИрд╢_рд░реЗрдВрдбрд░рд░.v1_6_0m1598451932.min.js
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреЛрдо@16.v1_6_0m1598451932.13.0.min.js
[email protected]_6_0m1598451932.7.2.min.js
рдбреИрд╢_рдмреВрдЯрд╕реНрдЯреНрд░реИрдк_рдШрдЯрдХ.v0_10_3m1598451933.min.js
рдмрдВрдбрд▓.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
рдбреИрд╢_рд░реЗрдВрдбрд░рд░.v1_6_0m1598451932.min.js

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд┐рд╕реА рднреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рдЕрдм рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди> 1.1 рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдФрд░ рдбреИрд╢ рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рдЕрдм рдЗрд╕ рдлрд┐рдХреНрд╕ рдХреЛ рдбреИрд╢-рдбреЗрдореЛ рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рд╣реИред рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрджреНрдпрддрди: рдбреИрд╢ 1.17.0 рдФрд░ рд╢рд╛рдЗрдиреАрдкреНрд░реЙрдХреНрд╕реА 2.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>/'
)

рдореИрдВ рдбреИрд╢ 1.17.0 рдФрд░ ShinyProxy 2.4.1 рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕реБрдзрд╛рд░ рдХреЛ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдбреИрд╢ рдбреЗрдореЛ рдбреИрд╢ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбреИрд╢ рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

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

рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рдФрд░ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЕрджреНрдпрддрди: рдбреИрд╢ 1.17.0 рдФрд░ рд╢рд╛рдЗрдиреАрдкреНрд░реЙрдХреНрд╕реА 2.4.1 рдиреЗ рдЪрд╛рд▓ рдЪрд▓реА рд╣реИред
рдмрд╕ рдЬрд░реВрд░рдд рд╣реИ:

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

рдирдорд╕реНрддреЗ @jtpoirier

рдбреИрд╢ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдк рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбреИрд╢ рдХреЛ рд╢рд╛рдЗрдиреАрдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд╕рд╛рде рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рдорд╛рди рдорд╛рди рдХреЗ рд╕рд╛рде рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред рдпреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:

  • routes_pathname_prefix
  • requests_pathname_prefix

рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдорд╛рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

/app_direct/<appname>/

рдЖрдкрдХреЛ рдбреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдРрдк рдХреА рдЖрдИрдбреА рд╕реЗ appname рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдПрдХ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд┐рдореНрди 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

рдлрд┐рд░ рдЖрд╡реЗрджрди рдХреА рдЖрдИрдбреА рд╣реИ dash-demo , рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рдмрди рдЬрд╛рддрд╛ рд╣реИ:

/app_direct/dash-demo/

рддреЛ рдЖрдкрдХреЗ рдбреИрд╢ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╢рд╛рдпрдж рдирд┐рдореНрди рдкрд╛рдпрдерди рдХреЛрдб рд╣реЛрдЧрд╛:

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

рд╣рдордиреЗ рдПрдХ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдбреИрд╢ рдРрдкреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реЗ рд╢рд╛рдЗрдиреАрдкреНрд░реЙрдХреНрд╕реА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрд╕ рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рдж рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ ShinyProxy рдРрдк рдореЗрдВ рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ SHINYPROXY_PUBLIC_PATH рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд░рдХрд╛рд░ /app_direct/dash-demo/ рд╣реЛрдЧрд╛ред
рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдбреИрд╢ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╢рд╛рдЗрдиреАрдкреНрд░реЙрдХреНрд╕реА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдРрдк рдирд╛рдо рдкрд░ рд╕реНрд╡рддрдВрддреНрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
BTW: рд╣рдо рдЗрд╕ рдорд╛рди рдХреЛ рдХрд┐рд╕реА рднреА рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗ рдмрд╛рдБрдзрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рднреА рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ, рдлрд┐рд░ рд╕реЗ рдРрдкреНрд╕ рдХреЛ ShinyProxy рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрд╡рддрдВрддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

рддреЗрдЬрд╝ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдирд┐рдпреЛрдЬрд┐рдд рд╕реБрдзрд╛рд░ рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреАред

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдбреИрд╢ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдбреИрд╢-рдбреЗрдореЛ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдХрд╛рд░рдгреЛрдВ рд╕реЗред "рд╕рд░реНрд╡рд░" рдХреЛ рдбреИрд╢-рдбреЗрдореЛ app.py рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред рдЕрдЧрд░ рдЙрд╕ рд▓рд╛рдЗрди рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдРрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдХрдВрдЯреЗрдирд░ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдордп рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреЗрдЧрд╛ред рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдбреИрд╢-рдбреЗрдореЛ рдЗрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ w/рдбреИрд╢ 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 рдиреЗ рд╕рдордЭрд╛рдпрд╛, рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ '/app_direct/dash-demo/' рдХреЛ рдЖрдкрдХреЗ 'requests_pathname_prefix' рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ 'routes_pathname_prefix' рдореЗрдВ рднреА рдбрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЖрдкрдХрд╛ рдкрд╛рдпрдерди рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

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 ()' рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред рдлрд┐рд░ рд╕реЗ рд╕рд░реНрд╡рд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдЪрд▓реЗрдЧрд╛ рд▓реЗрдХрд┐рди рд╢рд╛рдЗрдиреАрдкреНрд░реЙрдХреНрд╕реА рд╕реЗ рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рдкрд░ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ application.yml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдРрдк рдХреА рдЖрдИрдбреА 'рдбреИрд╢-рдбреЗрдореЛ' рд╣реИред

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 рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдФрд░ рдбреИрд╢ рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рдЕрдм рдЗрд╕ рдлрд┐рдХреНрд╕ рдХреЛ рдбреИрд╢-рдбреЗрдореЛ рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рд╣реИред рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рд╣рд╛рдп @jtpoirier , рдмрдврд╝рд┐рдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ!

@jfrubioz рд╣рдордиреЗ ShinyProxy 2.5.0 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЕрдм SHINYPROXY_PUBLIC_PATH рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╣рдорд╛рд░реЗ рдбреЗрдореЛ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдм рдбреИрд╢ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдЪреВрдВрдХрд┐ рдпрд╣ рдЕрдм рдареАрдХ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдЖрддреА рд╣реИ рддреЛ рдмреЗрдЭрд┐рдЭрдХ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jat255 picture jat255  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

fmmattioni picture fmmattioni  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

PauloJhonny picture PauloJhonny  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jat255 picture jat255  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lucius-verus-fan picture lucius-verus-fan  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ