【问题标题】:How to fix '404 (Not Found)' errors when sourcing CSS and Javascript files in ShinyProxy在 ShinyProxy 中获取 CSS 和 Javascript 文件时如何修复“404(未找到)”错误
【发布时间】:2019-08-30 02:44:37
【问题描述】:

我正在尝试使用 ShinyProxy 启动一个闪亮的应用程序——我以前做过很多次。但是,此应用程序未正确使用运行它所需的任何 CSS 或 JS 文件。

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

Dockerfile

FROM openanalytics/r-base

MAINTAINER Daniel Beachnau "DannyBeachnau@gmail.com"

# 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: DannyBeachnau@gmail.co,

  - 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

这是应用在闪亮代理中的外观。

problem

这是我的应用手动运行时的样子。

desired

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

之类的错误

GET https://myshinyserver.com/container_name/font-awesome-5.3.1/css/all.min.css net::ERR_ABORTED 404 (Not Found)

我确实在 ShinyProxy 上运行了其他可以正常显示的应用程序,但我无法解决这些应用程序的配置方式与此应用程序的配置方式之间的差异。让我知道是否需要其他详细信息来诊断问题。感谢所有反馈 - 谢谢。

【问题讨论】:

    标签: r docker shiny shinyproxy


    【解决方案1】:

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

    proxy_set_header Connection "upgrade";
    

    这个指令导致 NGINX 为每个 HTTP 请求添加一个 Connection: upgrade 标头,而它只应该用于 WebSockets。

    这条线是由 NGINX Inc. 自己推荐的,但是,这些建议旨在代理专门为 WebSockets 的流量,而 Shiny 流量是普通 HTTP 请求和 WebSockets 的组合。旧版本的 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 中链接的文章。

    【讨论】:

    • 感谢您的洞察力,这很有帮助。我确实发现工作图像使用闪亮的 1.2,而损坏的图像也使用闪亮的 1.3。
    • 请注意,Shiny 1.3.1 已发布,其中包含一项更改,允许它与配置为始终添加 Connection: upgrade 标头的代理一起使用。
    【解决方案2】:

    您必须在 Dockerfile 顶部安装请求的字体。您可以将其添加到“R 之外的依赖项”列表中:

    sudo apt-get install fonts-font-awesome
    

    【讨论】:

    • 我应该提到 CSS 错误似乎与所有加载 CSS 文件的包有关,例如闪亮的本身和闪亮的 CSS 加载器。以下是控制台中更多此类错误的屏幕截图:image
    【解决方案3】:

    我已经解决了我的问题,但是,这仍然不能算作一个充分的答案或解释,因为我无法解释为什么这个解决方案会有所作为。我决定使用现在可以使用的不同基础镜像重写 Dockerfile。我的代码中没有其他任何变化——只是 Dockerfile。工作的 docker 文件如下:

    FROM rocker/shiny-verse
    # based on debian 9
    
    MAINTAINER Daniel Beachnau "DannyBeachnau@gmail.com"
    
    # Dependencies outside of R
    RUN apt-get update && apt-get install -y \
        gnupg2 \
        apt-utils \
        sudo \
        gdebi-core \
        libxt-dev \
        xtail \
        wget
    
    # Install ODBC driver from microsoft
    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/debian/9/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
    # Shiny Packages
    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('lubridate')"
    RUN R -e "install.packages('reshape2')"
    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',  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)"]
    
    

    如果有人知道为什么会观察到这种行为,我很想听听,因为至少可以说我很困惑。

    【讨论】:

    • 只是一个猜测——它可能与不同包的 R 包版本有关,如果这是真的,那么从没有缓存的原始 Dockerfile (--no-cache) 重建 docker 映像也应该有所帮助。 ..
    【解决方案4】:

    为什么这个解决方案会有所作为

    这似乎是闪亮版本的问题,更改基本图像很可能解决了这个问题。

    Shiny apps not rendering after updated to v1.3.0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-21
      • 2019-09-30
      • 2017-04-01
      • 1970-01-01
      • 2021-06-11
      • 2018-07-21
      • 1970-01-01
      • 2021-08-17
      相关资源
      最近更新 更多