在单元测试中,我启动一个辅助函数(生成测试数据):
set.seed(1)
Run Code Online (Sandbox Code Playgroud)
我正在以交互方式开发单元测试,如下所示:
source('tests/runit.functions.R');test.something()
Run Code Online (Sandbox Code Playgroud)
但是当我从我的测试中运行时,run_tests.R他们失败了.尽管有set.seed(1)命令,我把它缩小到不同的随机数!我在set.seed(1)之后添加了这一行:
print(sessionInfo());print("RANDOM SEED:");print(.Random.seed)
Run Code Online (Sandbox Code Playgroud)
真正有趣的部分是随机种子完全不同.在批处理脚本中,它只有三个数字:
501 1280795612 -169270483
Run Code Online (Sandbox Code Playgroud)
在我的交互式R会话中,它是一个626元素的怪物:
[1] 403 624 -169270483 -442010614 ...
...
[617] 197184543 -2095148 ... -689249108
Run Code Online (Sandbox Code Playgroud)
第一个数字,501与403,显然是随机数生成器的类型,但我无法追踪主列表中数字的含义.
我认为我的问题的核心是确保我的单元测试具有可靠的随机数生成的最佳方法是什么?第二个问题是故障排除建议:如何跟踪正在使用哪个随机数生成器(更重要的是)哪个代码/包/设置决定使用它?
在sessionInfo不看非常有帮助的,但它显示出一些小的差异.例如,包含TTR包是由于正在运行其他单元测试.这是sessionInfo批处理脚本的输出,第一行是#!/usr/bin/Rscript --slave:
R version 2.15.1 (2012-06-22)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.utf8 LC_NUMERIC=C LC_TIME=en_US.utf8 LC_COLLATE=en_US.utf8 LC_MONETARY=en_US.utf8 LC_MESSAGES=en_US.utf8
[7] LC_PAPER=C LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.utf8 LC_IDENTIFICATION=C
attached base packages:
[1] methods stats graphics grDevices utils datasets base
other attached packages:
[1] TTR_0.21-1 xts_0.8-6 zoo_1.7-7 RUnit_0.4.26
loaded …Run Code Online (Sandbox Code Playgroud) 我正在尝试设置runit并登录我的debian wheezy VM.到目前为止,我已经设法通过以下设置获得gunicorn服务:
sudo mkdir /etc/sv/gunicorn
sudo vi /etc/sv/gunicorn/run
sudo ln -s /etc/sv/gunicorn/run /etc/service
Run Code Online (Sandbox Code Playgroud)
我的日志运行文件有:
LOG_DIR=/home/$USER/logs/gunicorn/
exec svlogd -tt $LOG_DIR
Run Code Online (Sandbox Code Playgroud)
当我运行sudo runsvdir/etc/service/gunicorn时
runsv supervise: fatal: unable to lock supervise/lock: temporary failure
Run Code Online (Sandbox Code Playgroud)
不知道我做错了什么,有什么指针吗?
How can I automatically generate test cases in RUnit?
For example, let's say I have a simple sum() function:
sum <- function(x, y) {
return (x + y)
}
Run Code Online (Sandbox Code Playgroud)
I would like to test this function on a series of different test cases:
test_cases <- c( c(2, 2, 4),
c(3, 3, 6),
c(0, 0, 0),
c(-1, 2, 1)
)
Run Code Online (Sandbox Code Playgroud)
The first two elements of each vector are x and y, and the third is the expected output of the sum(x,y) …
我一直在运行docker进程(apps)
docker run …
但是runit supervision(runit就像daemontools) - 所以runit确保进程保持运行,传递信号等.
这合理吗?Docker似乎想要运行自己的妖魔化 - 但它并不像runit那样彻底.此外,当runit重新启动应用程序时 - 每次都会创建一个新容器(正常),但它会留下旧容器的痕迹 - 这似乎暗示我正在以错误的方式执行此操作.
docker不应该以这种方式运行吗?
如果我不是建立一个集装箱从图像中,只有一次,再有runit运行/监督该容器中所有的时间?
我对确保Nginx始终处于启动状态感到困惑。我对init.d脚本的理解只是启动和停止nginx。它是否正确?然后在文档中说保持daemon = off;
现在,我想使用runit,以下是我的runit运行脚本:
#!/bin/sh
exec /etc/init.d/nginx start
Run Code Online (Sandbox Code Playgroud)
我注意到总是创建一个新的PID。
因此,总而言之:1)我在nginx文件中没有此语句:
daemon = off;
Run Code Online (Sandbox Code Playgroud)
2)我正在使用上面的runit脚本,但是它总是创建一个新的PID。
因此...确保nginx始终运行的最佳实践。
顺便说一下,我正在使用monit,但会运行它来拥有hte守护程序。
作为测试,我确实使用killall -9 nginx杀死了nginx,并且做了ps aux | grep nginx,发现我有新的pid。所以..我还需要runit吗?