在Scala应用程序中使用Apache Commons FTPClient在我的本地计算机上按预期工作,但在Heroku上运行时总是超时。相关代码:
val ftp = new FTPClient
ftp.connect(hostname)
val success = ftp.login(username, pw)
if (success) {
ftp.changeWorkingDirectory(path)
//a logging statement here WILL print
val engine = ftp.initiateListParsing(ftp.printWorkingDirectory)
//a logging statement here will NOT print
while (engine.hasNext) {
val files = engine.getNext(5)
//do stuff with files
}
}
通过添加一些记录,我已确认客户端 已成功连接,登录和更改目录。但是在尝试开始检索文件时停止(通过上面的分页访问或使用ftp.listFiles
进行未分页)并抛出连接超时异常(大约15分钟后)。
上述代码在本地工作正常但在Heroku上没有?
答案 0 :(得分:0)
原来FTP有两种模式,active and passive和Apache-Commons' FTPClient默认为有效。 Heroku的防火墙可能不允许主动FTP(这就是为什么它在本地正常运行但未部署的原因) - 通过添加ftp.enterLocalPassiveMode()
更改为被动模式解决了问题。