在Heroku上FTP超时

时间:2013-11-12 16:49:51

标签: scala heroku ftp apache-commons

在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上没有?

1 个答案:

答案 0 :(得分:0)

原来FTP有两种模式,active and passive和Apache-Commons' FTPClient默认为有效。 Heroku的防火墙可能不允许主动FTP(这就是为什么它在本地正常运行但未部署的原因) - 通过添加ftp.enterLocalPassiveMode()更改为被动模式解决了问题。