【问题标题】:How to export a Ruby Array from my Heroku console into CSV?如何将 Ruby 数组从我的 Heroku 控制台导出到 CSV?
【发布时间】:2012-06-02 04:51:00
【问题描述】:

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

在我目前的情况下,我每天都有一个 rake 任务,它会查找关于我的应用程序的推文。我想分析这些推文,看看它们是什么时候进来的,等等:

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

任何想法将不胜感激!

【问题讨论】:

  • 嗨塞尔吉奥!如果我可以写文本文件是什么意思?
  • 如果您知道如何编写文本文件,那么将推文写入 CSV 文件应该没问题。
  • 我不知道如何将 Heroku 控制台中的文本文件写入本地计算机。你介意告诉我怎么做吗?
  • 我不使用heroku(或其控制台),所以我不知道它是否允许您访问本地文件系统。至少您可以将此 CSV 打印到终端并将其复制/粘贴到您的本地文件中。我会创建一个“私人”网址,允许我下载该 CSV。
  • 您根本无法在 Heroku 服务器上保存文件,因为没有“真正的”文件系统。您需要将它们保存到 S3 或其他一些云存储提供商。

标签: ruby-on-rails ruby csv heroku


【解决方案1】:

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

heroku run console | tee output.txt

【讨论】:

  • 这冻结在Running 'console' attached to terminal... up, run.4296... 对任何人都有效吗? (编辑:格式化)
  • @ErikTrautman 我认为你是对的。这似乎不适用于最新的 heroku 客户端。
  • 这适用于我最新的 heroku 客户端,但我看不到我正在输入的任何内容。我盲目地输入了我的命令然后exit,在查看 output.txt 时它就在那里(我的输入和所需的输出)。
【解决方案2】:

我尝试按照建议使用 Tee,但也卡在了

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

我最终在 localhost 上运行了一个 SSH shell,然后通过 tee 进行管道传输。

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

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

【讨论】:

  • 为什么会真正解决它?!我宁愿实际模仿这种效果,但不在我的桌面上运行 ssh 服务器。
  • 这对我有用,谢谢你的建议。我正在使用 OSX。要 ssh 到 localhost,我必须在系统偏好设置>>共享下启用“远程登录”。
【解决方案3】:

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

【讨论】:

  • 将此与 File.new('Filename.csv','w') 结合起来,您可以轻松地将 csv 输出添加到文件中。为我节省了大量时间,您可以在任何 Rails 服务器上使用它。
  • 复制/粘贴的一个问题是,如果您试图捕获足够的数据,它会从 heroku 控制台顶部滚动出来。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

    再次感谢。

    【讨论】:

      【解决方案6】:

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

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

      如果文件中显示了 Rails 日志记录,则可以禁用它,如果文件中出现“正在运行`rails runner`”之类的启动记录,则可以修剪文件顶部,但这应该很容易做到。

      【讨论】:

        【解决方案7】:

        你可以向 SCP 出钱:

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

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

        【讨论】:

          【解决方案8】:

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

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

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

          您还可以通过管道将其传输到标准输入,在 Heroku 上运行本地脚本。

          cat my_script.rb | heroku run --no-tty 'ruby -W0 -r ./config/environment' &gt; 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 &gt; output.txt

          【讨论】:

            【解决方案9】:

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

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

            所以我最终以文本格式的电子邮件正文为我发送了 csv 内容。如果您已经设置了电子邮件,这也是一个简单的解决方案。

            【讨论】:

            • 感谢 Gnomet 的提示,介意分享一下您将如何继续这样做吗?
            • 我们有一个带有 Mailer 的 Rails 应用程序,用于邮件用户。所以我在那里添加了一个方法,只将给定变量的内容发送给用户。因此,在下面的示例中,PersonMailer 具有方法 free_content_message(email, content)。 csv_content = method_that_returns_the_csv_you_want PersonMailer.free_content_message("me@example.com", csv_content).deliver 我没有在没有 Rails 邮件程序的情况下发送邮件,所以现在不能提供更一般的建议。
            【解决方案10】:

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

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

            3. 完成后键入 ctrl + d。

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

            【讨论】:

              猜你喜欢
              • 2022-10-25
              • 2018-05-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-09-20
              • 1970-01-01
              • 2014-06-16
              • 2015-02-17
              相关资源
              最近更新 更多