r - 如何修复在 ShinyProxy 中获取 CSS 和 Javascript 文件时出现的 '404 (Not Found)' 错误

标签 r docker shiny shinyproxy

我正在尝试使用 ShinyProxy 启动一个 Shiny 的应用程序 - 我之前已经做过很多次了。但是,此应用程序未正确使用运行所需的任何 CSS 或 JS 文件。

当我使用 docker run -p 3838:3838 my_app 手动运行应用程序时,一切工作正常。但是,当将 ShinyProxy 指向 my_app 图像时,生成的应用程序无法加载任何 CSS 或 JS 文件。

Dockerfile

FROM openanalytics/r-base

MAINTAINER Daniel Beachnau "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="cc88ada2a2b58ea9adafa4a2adb98caba1ada5a0e2afa3a1" rel="noreferrer noopener nofollow">[email protected]</a>"

# Dependencies outside of R
RUN apt-get update && apt-get install -y \
    sudo \
    gdebi-core \
    pandoc \
    pandoc-citeproc \
    libcurl4-gnutls-dev \
    libcairo2-dev \
    libxt-dev \
    xtail \
    wget \
    libpq-dev \
    libmariadb-client-lgpl-dev \
    # Might be needed for the archivist R-Library
    dbus \
    systemd \
    # needed for odbc
    unixodbc-dev

RUN apt-get install apt-transport-https curl -y
RUN curl http://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update
RUN ACCEPT_EULA=Y apt-get install msodbcsql17 -y

# Download R-Packages
# tidyverse
RUN R -e "install.packages('tidyr')"
RUN R -e "install.packages('dplyr')"
RUN R -e "install.packages('readr')"
# Shiny Packages
RUN R -e "install.packages('shiny')"
RUN R -e "install.packages('shinycssloaders')"
RUN R -e "install.packages('shinydashboard')"
RUN R -e "install.packages('shinyWidgets')"
RUN R -e "install.packages('DT')"
RUN R -e "install.packages('shinyjs')"
RUN R -e "install.packages('flexdashboard')"
# Database Packages
RUN R -e "install.packages('odbc')"
RUN R -e "install.packages('RMySQL')"
# Other
RUN R -e "install.packages('devtools')"
RUN R -e "install.packages('lubridate')"
RUN R -e "install.packages('reshape2')"
RUN R -e "install.packages('grid')"
RUN R -e "install.packages('lemon')"
RUN R -e "install.packages('scales')"
RUN R -e "install.packages('ggthemes')"
RUN R -e "install.packages('ggplot2')"

RUN R -e "devtools::install_bitbucket(repo = 'my_repo/my_package',  auth_user = 'my_username', password = 'my_password')"

# copy the app to the image
COPY . /root

# run the script to update the app data
WORKDIR /root
RUN Rscript app_data_update.R

WORKDIR /root/app
COPY Rprofile.site /usr/lib/R/etc/
EXPOSE 3838
CMD ["R", "-e", "shiny::runApp('/root/app', host='0.0.0.0', port=3838)"]

application.yml

shiny:
  proxy:
    title: ShinyProxy Server
    logo-url: /images/logo-image.png
    landing-page: /
    heartbeat-rate: 10000
    heartbeat-timeout: 60000
    container-wait-time: 60000
    port: 8080
    authentication: ldap

    # Docker configuration
    docker:
      cert-path: /home/none
      url: http://localhost:2375
      port-range-start: 20000
    support:
      container-log-path: ./container-logs
      mail-to-address: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="98dcf9f6f6e1dafdf9fbf0f6f9edd8fff5f9f1f4b6fbf7" rel="noreferrer noopener nofollow">[email protected]</a>,

  - name: my_apps_name
    display-name: Shiny App
    docker-image: dbeachnau/my_app
    groups: [Shiny Users Management]
    logo-url: /images/logo-image.png
    container-volumes: ["/path/to/app:/root/app"]


logging:
  file:
    shinyproxy.log

这是应用程序在 Shiny 代理中的外观。

problem

这是我的应用程序在手动运行时的外观。

desired

chrome 的检查工具中的控制台充满了诸如

之类的错误

获取 https://myshinyserver.com/container_name/font-awesome-5.3.1/css/all.min.css net::ERR_ABORTED 404(未找到)

我确实在 ShinyProxy 上运行了其他应用程序,这些应用程序显示正常,但我无法解决这些应用程序的配置方式与此应用程序的配置方式之间的差异。如果诊断问题需要更多详细信息,请告诉我。感谢所有反馈 - 谢谢。

最佳答案

您可能会在 Shiny v1.3.0 中看到此情况,而不是在早期版本中看到此情况。如果是这样,可能是因为您的 NGINX 代理指令配置错误。我已经写了详细信息here ,但我也会在这里发布重要的细节。

proxy_set_header Connection "upgrade";

该指令会导致 NGINX 在每个 HTTP 请求中添加一个 Connection:升级 header (当它仅用于 WebSocket 时)。

这条线是 NGINX Inc. 自己推荐的,但是,这些建议旨在代理仅 WebSocket 的流量,而 Shiny 流量是普通 HTTP 请求和 WebSocket 的组合。旧版本的shiny/httpuv不介意这种情况,但新版本更加严格。

正确的配置如下所示:

http {

  map $http_upgrade $connection_upgrade {
      default upgrade;
      ''      close;
    }

  server {
    listen 80;


    location / {
      proxy_pass http://localhost:3838;
      proxy_redirect / $scheme://$http_host/;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_read_timeout 20d;
      proxy_buffering off;
    }
  }
}

请参阅 RStudio Community post 中链接的文章其他示例。

关于r - 如何修复在 ShinyProxy 中获取 CSS 和 Javascript 文件时出现的 '404 (Not Found)' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55582092/

相关文章:

r - R Shiny 的mainPanel显示样式和字体

r - 在 DataTable 输出中使用 Shiny 输入

r - 为什么环境的 `object.size`小于环境中对象的 `object.size`?

r - 通过匹配两列的值来过滤数据框

node.js - Docker 和 Rabbitmq : ECONNREFUSED between containers

java - 在 Docker 中运行时,Firestore 模拟器无法启动

R Shiny - 使用 updateSelectizeInput 优化页面加载时间

r - 在 ggvis 中添加带有 layer_lines 的虚线

r - 根据 R 中的数据框绘制合适的图形并将其转换为 HTML

docker - 卸载 Hyperledger Composer