首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用shiny部署闪亮的应用程序时,将.Renviron文件放在哪里?

当使用shiny部署闪亮的应用程序时,将.Renviron文件放在哪里?
EN

Stack Overflow用户
提问于 2022-06-23 07:50:54
回答 2查看 298关注 0票数 4

我正在学习如何使用光代理部署R闪亮的应用程序,但我不知道将.Renviron文件放在哪里,该文件包含用于访问数据库的全局变量。

码头映像生成时没有任何错误,但当我使用以下方法启动容器时:

代码语言:javascript
复制
docker run -it -p 3838:3838 shinyproxy-template .

它在.Renviron文件中找不到env变量,我最终得到了一个R代码的错误,它需要全局变量。

我的当前文件夹结构如下:

代码语言:javascript
复制
shinyproxy-template/
                   |- app-folder/
                   |- .gitignore
                   |- Dockerfile
                   |- README.md
                   |- app.Rproj
                   |- Rprofile.site
                   |- .Renviron

我尝试将.Renviron文件放置在app-folder/中,然后再次构建码头映像,但仍然无法访问全局变量。

我应该把.Renviron放在哪里,这样应用程序才能访问全局变量?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-23 14:09:53

有多种选择:

.Renviron文件放置到容器内的预期位置

您可以向COPY添加一个Dockefile命令,以便将.Renviron文件复制到预期的位置--即用户的主目录或在Dockerfile中定义的WORKDIR位置。如果是根用户,则如下所示:

代码语言:javascript
复制
COPY .Renviron /root/

将环境变量从.Renviron添加到Dockerfile中

添加如下行:

代码语言:javascript
复制
ENV VAR1="value1"
ENV VAR2="value2"

给你的Dockerfile

将环境变量从.Renviron添加到shinyproxy配置中

可以在application.yaml配置文件中定义环境变量,方法是使用

代码语言:javascript
复制
container-env:
  VAR1: VALUE1
  VAR2: VALUE2

代码语言:javascript
复制
container-env-file: /path/to/.Renviron

你的应用程序规范。请注意,这里的路径位于主机上,而不是容器内。

对于docker run

在shinyproxy之外执行docker run时,可以使用参数--env-file,如下所示:

代码语言:javascript
复制
docker run -it -p 3838:3838 shinyproxy-template --env-file /path/to/shinyproxy-template/.Renviron

Releant文档链接:

票数 2
EN

Stack Overflow用户

发布于 2022-06-23 14:11:04

编辑:看一下@Max的解决方案。我们几乎同时发了信,但他的指示比较清楚。

经过多次反复试验,我终于找到了解决办法。

首先,启动shiny外部的容器以检查这个闪亮的应用程序是否正常运行?使用docker的--env-file标志指定.Renviron文件路径。在我的例子中,由于Dockerfile.Renviron都位于同一个文件夹中,所以我会这样做:

代码语言:javascript
复制
docker run -it --env-file .Renviron -p 3838:3838 shinyproxy-template .

该应用程序现在将识别在.Renviron文件中定义的errors,没有错误!

然后,我更改为拥有shinyproxy-2.6.1.jar文件的目录,并使用java -jar shinyproxy-2.6.1.jar再次运行它。当我试图启动我的shinyapp时出现了一个错误。它找不到敌人。

因此,我直接将它们添加到application.yml中,它与shinyproxy-2.6.1.jar位于同一个位置。

代码语言:javascript
复制
  - id: app-folder
    display-name: My App
    description: My App's title
    container-cmd: ["R", "-e", "shiny::runApp('/root/app-folder')"]
    container-image: openanalytics/shinyproxy-template
    container-env:
        ENV1: ENV1-VALUE
        ENV2: ENV2-VALUE
        ENV3: ENV3-VALUE
    access-groups: scientists

根据您的情况,将yml部分的必要部分替换为相应的部分。同样的情况也适用于env。

事实上,让我提供我整个application.yml文件的原型,看看我添加“wca”的最后一个应用程序:

代码语言:javascript
复制
proxy:
  title: Open Analytics Shiny Proxy
  logo-url: https://www.openanalytics.eu/shinyproxy/logo.png
  landing-page: /
  # hide nav bar:
  hide-navbar: true
  heartbeat-rate: 10000
  heartbeat-timeout: 60000
  port: 8080
  authentication: ldap
  admin-groups: scientists
  # Example: 'simple' authentication configuration
  users:
  - name: jack
    password: password
    groups: scientists
  - name: jeff
    password: password
    groups: mathematicians
  # Example: 'ldap' authentication configuration
  ldap:
    url: ldap://ldap.forumsys.com:389/dc=example,dc=com
    user-dn-pattern: uid={0}
    group-search-base:
    group-search-filter: (uniqueMember={0})
    manager-dn: cn=read-only-admin,dc=example,dc=com
    manager-password: password
    # Docker configuration
  docker:
    url: http://localhost:2375
    port-range-start: 20000
  specs:
  - id: 01_hello
    display-name: Hello Application
    description: Application which demonstrates the basics of a Shiny app
    container-cmd: ["R", "-e", "shinyproxy::run_01_hello()"]
    container-image: openanalytics/shinyproxy-demo
    access-groups: [scientists, mathematicians]
  - id: 06_tabsets
    container-cmd: ["R", "-e", "shinyproxy::run_06_tabsets()"]
    container-image: openanalytics/shinyproxy-demo
    access-groups: scientists
  - id: euler
    display-name: Euler's number
    description: Adding another app to shinyproxy
    container-cmd: ["R", "-e", "shiny::runApp('/root/euler')"]
    container-image: openanalytics/shinyproxy-template
    access-groups: scientists
  - id: wca
    display-name: Wasanii
    description: WhatsApp Chat Analysis
    container-cmd: ["R", "-e", "shiny::runApp('/root/wca')"]
    container-image: wca
    container-env:
        FIREBASE_API_KEY: myfirebaseapikey
        FIREBASE_PROJECT_ID: myfirebaseprojectid
        FIREBASE_AUTH_DOMAIN: myfirebaseauthdomain
        FIREBASE_STORAGE_BUCKET: myfirebasestoragebucket
        FIREBASE_APP_ID: myfirebaseappid
        FIREBASE_DATABASE_URL: myfirebasedatabaseurl
    access-groups: scientists

logging:
  file:
    shinyproxy.log

显然,有一个更好的解决方案可以直接引用.Renviron文件,但是由于我无法解决这个问题,就可以了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72726483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档