首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Heroku上从Java/Kotlin应用程序运行Python脚本

在Heroku上从Java/Kotlin应用程序运行Python脚本
EN

Stack Overflow用户
提问于 2018-09-16 03:07:38
回答 1查看 2.3K关注 0票数 1

我有一个Java/Kotlin应用程序,它在用户每次发出请求时都会运行Python脚本。

它在我的笔记本电脑和任何其他VPS上都运行良好。但我不能让它在Heroku上工作。它不工作,并且不打印任何内容。

相关代码如下:

代码语言:javascript
复制
val command = "python3 $s/assets/script.py $params"
println("Command: $command")
val process = Runtime.getRuntime().exec(command)
process.waitFor()
val reader = BufferedReader(InputStreamReader(process.inputStream))
val message = reader.lines().collect(Collectors.joining("\n"))
println(message)

为什么这在Heroku上会失败?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-16 22:04:16

Heroku基于buildpacks构建应用程序。每个构建包都知道如何构建特定类型的项目,例如,一个可能知道如何安装Maven依赖项和编译Kotlin源代码,而另一个可能知道如何安装Ruby gem。

在简单的情况下,开发人员不需要太担心这一点。当没有显式请求构建包时,Heroku tries to infer which buildpack it should use。基本上,它以给定的顺序迭代官方支持的构建包,并使用每个构建包的detection script来查看项目是否与该构建包匹配。

一旦找到匹配的构建包,它就会停止查找。在简单的情况下,这通常就足够了。但是每个构建包都被设计为生成一个相当精简的映像;您可能希望在常规Linux机器上存在的工具并不一定存在。特别是,Java/Kotlin构建包不会为您提供python二进制文件。

好消息是,只需进行一点配置,就可以使用multiple buildpacks

首先,设置您的主构建包:heroku buildpacks:set heroku/java

  • Then,添加您的辅助构建包:heroku buildpacks:add --index 1 heroku/python

  • Make使用heroku buildpacks确保您的构建包以正确的顺序显示(首先是,然后是

列表中的最后一个构建包将用于确定应用程序的process types。从早期构建包中定义的任何进程类型都将被忽略。

Python

  • 最后,您可能需要添加一个空的requirements.txt文件,以防止构建包无法运行。或者,您可以添加任何Python依赖项。

如果您确实有Python依赖项,请考虑使用PipfilePipfile.lock而不是requirements.txt。这将导致使用pipenv而非pip.构建您的应用程序

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52347984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档