我正在使用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没有像宣传的那样设置路径?
答案 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)。希望有所帮助!