我正在使用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%