作为一名开发者,我的工作机器是Macbook,但经常需要在其他平台调试R问题。多年来,我一直在使用 VirtualBox 和 VMware 等工具安装不同的操作系统并在我的 Macbook 上运行它们。我注意到 VMware 上的 Windows 需要越来越多的内存。我总共有 16Gb 内存,必须给 VMware 至少 10Gb 才能运行 Windows。我不确定我是否应该将其归咎于 VMware 或 Windows,但这肯定会在我启动虚拟机时减慢我的计算机速度。
一两年前,我发现了 Github action mxschmitt/action-tmate ,从那以后我就越来越少用 VMware 了。通过这个简单的操作,您可以在 Github Actions 支持的任何平台上调试问题,包括 Windows、macOS 和 Ubuntu。当然,您也可以调试 R 问题。
我创建了一个示例 repo yihui/tmate-r来展示如何设置一个 Github 操作.github/workflows/debug.yaml
,它首先安装 R、Pandoc 和 TinyTeX,然后使用tmate
操作,这样你就可以能够通过ssh
进入 Github 操作的虚拟机(或单击 web shell 的链接)来调试 R 问题。您可以将config
中的os
更改为ubuntu-latest
、 windows-latest
或macOS-latest
,具体取决于您要调试的平台。同样,你也可以将R版本改为devel
、 release
和oldrel-1
等,这样你就可以使用不同版本的R进行调试。大多数时候我使用devel
(即开发)版本,因为我不我不想将它安装在我自己的计算机上,并且我的软件包中的 CRAN 问题很可能出现在 R 的devel
版本中。
使用ISO-8859-15
语言环境进行调试的示例
我最近尝试调试的一个问题是knitr的反向依赖未能通过 CRAN 的 Debian 机器上的R CMD check
。这台机器有一个特殊的语言环境en_US.iso8859-15
。我无法在我的 macOS 上重现该问题,但这一定是因为我没有使用 R 的devel
版本。我使用 Github 操作启动了一台 Ubuntu 机器。我花了好几个小时才弄清楚如何正确设置语言环境:
sudo locale-gen en_US.ISO-8859-15 # then start R with this locale LANG=en_US.ISO-8859-15 R
也就是说,我花了几个小时终于弄清楚我需要ISO-8859
而不是iso8859
……在CRAN 页面上, LC_CTYPE
是en_US.iso885915
,我也尝试过但失败了。我不知道这是否是 Debian 和 Ubuntu 之间的区别。我写下这篇笔记以防其他任何糟糕的包作者遇到同样的问题。
关于 Windows 上符号链接的另一个例子
昨天用Windows机器调试一个符号链接问题,发现file.symlink()
在Github的Windows机器上可以,但是在CRAN的机器上就不行了。再一次,我不知道为什么会这样,但我只是在这里写下一张纸条。
Windows 上的警告
我不确定为什么,但是如果您在 Windows 上运行R
,则 CRAN 存储库未按预期设置(这可能是 shell 的问题)。你必须自己设置它,否则install.packages()
会挂起你的会话并且无法从 shell 退出。您将需要取消 Github 操作。为避免这种情况,您可以先运行:
if (identical(getOption('repos'), c(CRAN = '@CRAN@'))) options(repos = 'https://cran.rstudio.com')
概括
您不必购买虚拟机工具,或某个操作系统 (Windows) 的副本,或 Macintosh 计算机来调试其他平台上的问题。运行 Github 操作,并等待在 Github 操作日志中设置tmate
会话。然后,您只需要一个运行ssh
的终端,或者只需单击链接即可在浏览器中使用 web shell(首次登录时按q
)。你有大约六个小时的时间,这可能足以解决大多数问题。调试完成后,一定要注销,以免浪费Github资源。