【发布时间】:2021-05-14 09:29:44
【问题描述】:
我正在尝试将一些以前在 Heroku 上运行的旧 Ruby 代码移植到基于 Python 的 Google Cloud Function。
此代码运行 Apple 的 Reporter 工具,该工具是“一个命令行工具,可用于下载销售和趋势报告以及付款和财务报告”。文档可以在here找到。
Ruby 代码多年来一直运行良好,直到昨天,在带有 Ruby + Java 构建包的 Heroku 上运行。一个小的 sn-p,其中接收到 args 选项:
options = [
vendor_id,
file_type,
sub_file_type,
'Daily',
trimmed_date,
version
]
Dir.chdir("#{Rails.root}/tmp/") do
stdout, stderr, status = Open3.capture3("java -jar #{Rails.root}/public/jars/Reporter.jar p=Reporter.properties m=Robot.XML Sales.getReport #{options.join(', ')}")
return {:status => status, :error => stderr.to_s, :stdout => stdout.to_s }
end
没有代码或堆栈更新后我在 Heroku 上看到的错误是 Network is available but cannot connect to application. Check your proxy and firewall settings and try again.
我们的大多数其他类似流程已移至 Google Cloud Functions,因此在出现上述错误后,我想我也将其移走。
所以这次在 Python 中使用了类似的 sn-p:
from subprocess import Popen, PIPE
def execute_reporter_jar(vendor_id, trimmed_date, file_type, api_version):
process = Popen(["java -jar Reporter.jar p=Reporter.properties Sales.getReportVersion Sales, Detailed"], stdin=PIPE, stdout=PIPE, shell=True)
out, err = process.communicate()
print("returncode = %s", process.returncode)
print("stdout = %s", out)
print("stderr = %s", err)
这在本地运行良好,但是当我部署到 Google Cloud 时,它似乎在几毫秒内成功运行,但是,实际上什么也没发生,当我深入挖掘时,似乎子进程返回了 127 - command not found 错误。所以看来云功能无法访问Java。
在 24 小时后,我遇到了这个问题。任何人都可以帮忙吗?我的 Java 知识为零,我知道云函数有 Java 运行时,但我更愿意坚持使用 Python。
最终目标是让 Apple 的记者运行并将请求的文件保存到 Google Cloud Storage。
提前致谢!
【问题讨论】:
标签: java python ruby google-cloud-platform google-cloud-functions