如何将我的Heroku控制台中的Ruby数组导出为CSV?

我希望将我的heroku控制台中的数组导出到本地CSV文件中。

在我目前的情况下,我有一个每日rake任务,寻找推文谈论我的应用程序。 我想分析这些推文,看看他们什么时候进来,等等:

heroku run console tweets = Tweet.all code to export tweets into a local CSV file goes here 

任何想法将不胜感激!

您无法从heroku控制台访问本地文件系统。 一种选择是使用Tee 。 Tee将输出发送到STDOUT和文件,因此您可以拥有打印所有内容的本地日志。

 heroku run console | tee output.txt 

我按照建议尝试使用Tee,但也陷入困境

 Running `console` attached to terminal... up, run.4165 

我最终运行了一个SSH shell到localhost,然后通过tee管道。

 $ ssh localhost | tee output.txt $ heroku run console 

可能不是最好的解决方案,但它对我有用。

FWIW你可以很容易地用逗号和换行符放一个字符串,然后将粘贴复制到你的文本编辑器中并保存为.csv,尽管“所有的推文”可能有点笨拙。

 tweets = Tweet.all @string = String.new() @string << Tweet.last.attributes.keys.join(", ") + "\n" # "header" row with attribute names tweets.each do |t| @string << t.attributes.values.join(", ") + "\n" end puts @string #will output string with \n newline which you could then copy paste into your editor and save as a csv 

我使用Taps将数据库导出到本地计算机,然后在那里进行操作: https : //devcenter.heroku.com/articles/taps

您还可以使用rails runner在heroku上运行一行代码或管道(或tee)将结果传输到文件:

 heroku run rails runner \'Tweet.all.to_csv\' -a my-app-name | all_tweets.csv 

您可以禁用rails日志记录,如果它出现在您的文件中并修剪文件的顶部,如果您在文件中获得了像“Running`portr runner”这样的启动日志记录,但这应该很容易。

你可以向SCP掏空:

 my_data = "hello world" File.write("tmp/data", my_data) `scp tmp/data me@some-server:` 

它可能会提示您服务器未知并要求输入密码。

您可以在Heroku实例上运行Ruby:

echo 'p User.first' | heroku run --no-tty 'ruby -W0 -r ./config/environment' > output.txt

这会将第一个用户打印到output.txt文件。

你也可以在Heroku上运行一个本地脚本,将它传递给stdin。

cat my_script.rb | heroku run --no-tty 'ruby -W0 -r ./config/environment' > output.txt

请注意,您可能会收到一些不需要的文本(如警告),这些文本将出现在output.txt文件的开头。 您必须手动修剪它或使用修剪命令,例如:

tail -n +4 -f ,不会打印前4行。

这是完整的例子:

cat my_script.rb | heroku run --no-tty 'ruby -W0 -r ./config/environment' | tail -n +4 -f > output.txt

我按照建议尝试了Tee,但由于某种原因它总是在输出后卡住

 Running `console` attached to terminal... up, run.1 

所以我最终以文本格式的电子邮件正文为我发送了csv内容。 如果您已经设置了电子邮件,那么这也很容易解决。

我尝试使用新的heroku控制台执行以下步骤。我能够获取日志。

  1. type命令脚本output.txt(这会创建一个名为output.txt的文件来保存终端日志)
  2. 打开heroku控制台并执行命令。

  3. 当你完成后输入ctrl + d。

终端日志保存在output.txt文件中。