2013-02-27 63 views
1

我做了一个交互式rake任务来完成管理任务。此任务通过STDIN.gets.strip获得输入,并按照计划在本地运行:输入某个值,然后按Enter,任务在下一个STDIN.gets.strip处继续运行。Heroku上的Rake任务:STDIN.gets.strip - “Enter”键的行为按下两次

但是,当我试图通过heroku宝石(在Windows 7中)在Heroku上运行:

heroku run rake admin --app my-application 

它承认Enter键按下两次 - 第一次与价值,第二次则是刚刚Enter ,没有价值。

如何防止这种行为?我可以在STDIN.gets.strip之后以某种方式清理输入缓冲区吗?

回答

0

我个人认为这是错误的做法。

倒不如简单地定义你的rake任务采取的命令行参数,那么你并不需要处理交互式输入

的麻烦,请参阅该问题的更多细节

Rails Rake: How to pass in arguments to a task with :environment

+0

我知道如何完成需要参数的任务,并且有多种类型的任务,但是我不喜欢这种方法,原因如下:1.每个rake任务准备运行很长一段时间,然后快速完成工作。我很恼火。交互式任务使我可以在20秒内完成10个耙子任务。这10个rake任务占用2分钟(包括等待); 2.我必须用rake -T列出rake任务(并等到它开始实际列出任务)。我必须记住每个任务的调用语法。 – Paul 2013-02-27 15:10:31

+1

P.S. Mark,我在交互式rake任务中询问STDIN,但你回答说我不需要交互式rake任务。在严格的条件下,我不得不降低你的答案,但实际上不会这样做。 – Paul 2013-02-27 15:12:21

+0

您好,我很欣赏您的评论,但有一个想法,如果需要输入的问题需要20秒才能完成,您可以不在该网站中为该输入创建接口,然后拥有一个接受输入的网页,然后运行任务处理。 20秒不会吹出Heroku 30秒的限制。 – 2013-02-27 16:44:27