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

时间:2012-05-27 13:01:08

标签: ruby-on-rails ruby csv heroku

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

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

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

任何想法都将不胜感激!

10 个答案:

答案 0 :(得分:33)

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

heroku run console | tee output.txt

答案 1 :(得分:19)

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

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

我最终运行了一个SSH shell到localhost,然后通过tee传送它。

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

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

答案 2 :(得分:6)

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

感谢您的帮助,我跟踪了这​​个railscast http://railscasts.com/episodes/362-exporting-csv-and-excel并添加了一种从管理面板导出到excel的方法。

再次感谢。

答案 5 :(得分:1)

你可以向SCP伸出援手:

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

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

答案 6 :(得分:1)

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

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

您可以禁用rails log,如果它们出现在您的文件中并修剪文件顶部,如果您正在获取启动日志记录,例如&#34;运行`rails runner`&#34;在你的文件中,但这应该很容易做到。

答案 7 :(得分:1)

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

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

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

此外,您可以通过将其连接到stdin来运行Heroku上的本地脚本。

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

答案 8 :(得分:0)

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

输出后卡住
Running `console` attached to terminal... up, run.1

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

答案 9 :(得分:0)

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

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

  3. 完成后输入ctrl + d。

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