将本地标准输入管道连接到'heroku run' - 不能写入标准输出吗?4K 标准输出缓冲区?



我正在使用thor编写命令行任务(在rails 3应用程序中),并试图通过heroku将输入管道传输到它们,例如cat somefile.csv | heroku run thor sometask

在我的本地机器cat somefile.csv | thor sometask上工作得很好,但在heroku上可能会失败。某些任务的某些版本偶尔会工作,而其他版本总是在特定点失败——1个问题是cat somefile.csv在被thor sometask使用时被回显到控制台(这只发生在heroku上,所以我认为这是heroku CLI内部的)。

我找到了一个变通方法,那就是确保我不会在thor tasks&他们调用的函数,但不得不这样做是令人沮丧的(没有进度指示等)。

另一个"解决方法"是确保发送的文件低于4k(4095字节)——我还没能用这个让它失败

你知道为什么会发生这种情况吗(以及为什么猫会被回显到stdout)?例如,在通信过程中的某个地方是否有4k标准输出缓冲区限制?有什么方法可以让heroku CLI不那么冗长吗?

如果您使用";不向控制台写入任何内容";而不是cat使用pv,您将能够看到进度指示器。

输出可能是这样的:

$ pv somefile.csv | heroku run thor sometask
3.12MiB 0:00:00 [25.9MiB/s] [===============================================================================================================>] 100%            

最新更新