【发布时间】:2014-07-14 02:59:58
【问题描述】:
我有一个 R Studio 服务器的预览版(0.98.864 Ubuntu 版本),在 AWS 上设置为 EC2 微实例。当我尝试编织一个简单的 .Rmd 文档时,我收到以下错误消息:
Error in with_pandoc_safe_environment({ :
The 'LANG' environment variable must be set before running Pandoc.
Calls: <Anonymous> ... FUN -> get_pandoc_version -> with_pandoc_safe_environment
Execution halted
我通过编辑/etc/environment 设置了语言变量,并且我安装了language-pack-en-base。现在,当我运行 locale 时,我得到:
LANG=en_US.UTF-8
LANGUAGE=en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
所以看起来 LANG 环境变量已经设置好了。
确实,当我从命令行运行 R 时,我得到:
> Sys.getenv("LANG",unset=NA)
[1] "en_US.UTF-8"
它似乎也已为所有用户设置,因为当我以其他用户身份登录时使用
su - <username>
然后运行locale,我得到了上面的结果。
但是,当我重新启动服务器时:
sudo rstudio-server restart
然后以用户身份登录服务器,我得到:
> is.na(Sys.getenv("LANG", unset = NA))
[1] TRUE
我的语言设置适用于所有用户,但不知何故此信息无法到达服务器。
部分解决方法是以用户身份登录服务器并添加
Sys.setenv(LANG="en_US.UTF-8")
致我的.Rprofile。但是,这一次只适用于一个用户,我想一次性解决所有用户的问题。
有人能看出我哪里出错了吗?
或者R中是否有另一个必须修改的配置文件?我尝试创建各种命令并将其添加到/etc/rstudio/rserver.conf 和/etc/rstudio/rsession.conf(请参阅this document),但没有任何命令能够通过配置测试。
【问题讨论】:
-
我认为您可能不需要编辑 /etc/environment.无论如何,我的
LANGUAGE和LC_ALL默认是空的(Debian 和 Ubuntu)。这可能是原因。如果不编辑 /etc/environment,locale会返回什么? -
@Yihui,对于我(Ubuntu 14.04)来说,LC_ALL 和 LANGUAGE 默认为空也是如此。在注释掉
/etc/environment的语言编辑并重新登录后,locale告诉我 LANGUAGE 和 LC_ALL 为空。 (LANG 是 en_US.UTF-8。) -
我刚刚在Debian上测试了最新的RStudio Server预览版,没有发现问题。由于
locale为您提供了正确的 LANG 变量,我不知道 RStudio Server 是如何识别它的。 -
@Yihui,我也很疑惑,不过现在我可以写一行
bash代码,将需要的Sys.setenv()命令添加到我所有的.Rprofile中当前用户(所有人都希望 LANG 成为 en)。如果我遇到其他任何事情,我会告诉你的。
标签: r environment-variables knitr rstudio pandoc