带有buildpacks的heroku如何处理PATH?

时间:2013-05-12 21:04:10

标签: r heroku environment-variables buildpack

我正在使用heroku-buildpack-r和heroku-buildpack-ruby与heroku-buildpack-multi一起使用。一切安装正确,R在本地工作。

# .buildpacks
https://github.com/heroku/heroku-buildpack-ruby.git
https://github.com/virtualstaticvoid/heroku-buildpack-r.git

根据this heroku post,yAML在bin / release中为buildpack设置了环境:

cat <<EOF
---
config_vars:
  PATH: /app/vendor/R/bin:bin:/usr/local/bin:/usr/bin:/bin
  R_HOME: /app/vendor/R
  R_INCLUDE: /app/vendor/R/lib64/R/include
EOF

这段代码似乎在运行:

R 2.15.1 successfully installed
Using release configuration from last framework R:
---
config_vars:
  PATH: /app/vendor/R/bin:bin:/usr/local/bin:/usr/bin:/bin
  R_HOME: /app/vendor/R
  R_INCLUDE: /app/vendor/R/lib64/R/include

但是,在完成推送后,路径未设置为此:

~ $ echo $PATH
/app/bin:/app/vendor/bundle/ruby/1.9.1/bin:/usr/local/bin:/usr/bin:/bin

我可以使用heroku config:set手动设置PATH,这似乎是唯一的解决方案。

为什么buildpack没有像宣传的那样设置路径?

3 个答案:

答案 0 :(得分:1)

使用.profile.d脚本设置环境变量似乎解决了与其他buildpack一起使用时的问题。您可以使用fixes分支进行试用。

答案 1 :(得分:0)

启用labs user-env-compile功能。 这将确保您在编译期间可以访问环境变量 https://devcenter.heroku.com/articles/labs-user-env-compile#enabling

答案 2 :(得分:0)

当通过Heroku将R和Python连接在一起时,我遇到了一个非常类似的问题。诀窍是$ PATH变量在每个buildpack运行时都会重置;该进程按包进行事务化,并引用不是您的heroku配置的PATH:获取PATH。我不知道为什么。您可以通过分叉Heroku buildpack并在那里显式添加$ PATH变量来使其工作。我听说你可以设置“真正的”buildpack repo作为你的变化的上游,让所有未来的变化都通过,但我只是分叉和破坏以使自己的事情发生。

奖金回合:即使在这个$ PATH变化之后你可能会遇到问题,因为R抱怨无法找到东西。您需要在LD_LIBRARY_PATH中添加一些特定的.so(这次是实际的heroku config var)。希望有所帮助!