【发布时间】:2019-05-02 00:09:46
【问题描述】:
我正在努力定义一个 Docker 容器,它可以在云环境中启动,并在我们公司的数据库上运行一些报告并自行关闭,而我们的数据科学团队(包括我自己)尽可能少地参与其中。
我几乎已经完成了一切的启动和运行,除了一个令人恼火的异常——报告是在 R 中使用我们已经使用了几年的一些代码完成的。我在 Rocker verse 的基础上进行构建,并且正在添加需求库。
关于需求的烦人的事情(在这个用例中)是,当它第一次运行时,它会询问以下内容:
>library('needs')
Should `needs` load itself when it's... needed? (this is recommended)
1: No
2: Yes
Selection:
在典型的交互式设置中,这很好,我只需输入“是”并按 Enter 即可。但是,当我希望整个环境每周自行构建和运行一次时,我不想回答这个问题。我希望它假设是。
到目前为止,我尝试过的包括以下各项:
library('needs', quiet=TRUE)
library('needs', quietly=TRUE)
suppressMessages(library('needs', quietly=TRUE))
suppressWarnings(suppressMessages(library('needs', quietly = T)))
suppressPackageStartupMessages(library('needs', quietly=TRUE))
这些都不能解决问题。 needs documentation 提供了以后以编程方式更改此设置,但不适用于定义第一次运行需要时的设置:
推荐使用是让函数在提示时自动加载 第一次以交互方式加载包。更改此设置 稍后,运行 needs:::autoload(TRUE) 或 needs:::autoload(FALSE) 转 分别开启或关闭自动加载。
我也试过悄悄安装需求,也无济于事。不幸的是,我无法在我的 Dockerfile 中运行 bash 命令来响应 Yes,或者至少我还没有找到方法。
我想避免因需要而删除依赖项,因为这将涉及大量代码重构。
关于如何解决这个问题的任何想法?
谢谢! :] -文斯
更新
解决方案有点老套,但在我的 Dockerfile 中,我正在对需要分配给 sysfile 变量的文件进行 vim 编辑:
sysfile <- system.file("extdata", "promptUser", package = "needs")
对我来说是 /usr/local/lib/R/site-library/needs/extdata/promptUser,并将其内容从“1”更改为“0”解决了我的问题。
【问题讨论】:
-
在 bash 中,您是否尝试过类似 command
<<< 'Yes'之类的东西? -
嗨 cdarke,感谢您在这里的帮助。我已经尝试过了,不幸的是它不起作用,因为它有效地启动了一个新的 bash 命令,而不是在 R shell 中将它作为 R 命令运行。如果我尝试添加类似 R -e "Yes" 的内容,它只会启动一个新的 R shell 并失败,因为 Yes 本身不是有效的 R 命令。 ://
标签: r bash docker automation