Подтвердить что ты не робот

Как экспортировать Ruby Array из консоли Heroku в CSV?

Я хочу экспортировать массив из моей консоли heroku в локальный файл CSV.

В моей текущей ситуации у меня есть ежедневная рейк-задача, которая ищет твиты, которые говорят о моем приложении. Я бы хотел проанализировать эти твиты, чтобы узнать, в какое время они вошли и т.д.:

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

Любые идеи будут очень признательны!

4b9b3361

Ответ 1

Вы не можете получить доступ к своей локальной файловой системе с консоли heroku. Один из вариантов - использовать Tee. Tee отправляет выходные данные в STDOUT и файл, поэтому вы можете иметь локальный журнал всего, что было напечатано.

heroku run console | tee output.txt

Ответ 2

Я попробовал использовать Tee, как было предложено, а также застрял в

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

Я закончил работу с SSH-оболочкой на localhost, а затем передал ее через tee.

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

Не может быть лучшим решением, но это сработало для меня.

Ответ 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

Ответ 5

Спасибо за помощь ребятам, я последовал за этим railscast http://railscasts.com/episodes/362-exporting-csv-and-excel и добавил способ экспорта в excel с панели администратора.

Еще раз спасибо.

Ответ 6

Вы можете выполнить команду SCP:

my_data = "hello world"
File.write("tmp/data", my_data)
`scp tmp/data [email protected]:`

Он может сообщить вам о неизвестном сервере и запросить пароль.

Ответ 7

Вы также можете использовать rails runner, чтобы запустить строку кода или три в файлах heroku и pipe (или tee) в файл:

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

Вы можете отключить ведение журнала рельсов, если это отображается в вашем файле, и обрезать верхнюю часть файла, если вы получаете регистрацию запуска, например "Запуск" rails runner "в вашем файле, но это должно быть легко сделать.

Ответ 8

Вы можете запустить Ruby на вашем экземпляре Heroku:

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

Это напечатает первого пользователя в файле output.txt.

Также вы можете запустить локальный script на 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

Ответ 9

Я попробовал Tee, как было предложено, но по какой-то причине он всегда застревал после выхода

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

Итак, я закончил рассылку содержимого csv для меня в текстовом формате. Если у вас уже есть настройка электронной почты, это также может быть простым решением.

Ответ 10

Я попытался выполнить следующие шаги с помощью новой консоли heroku. Мне удалось получить журналы.

  • Команда
  • script output.txt(это создает файл с именем output.txt для сохранения журналов терминалов)
  • Откройте консоль heroku и выполните команды.

  • когда вы закончите, введите ctrl + d.

Журналы терминалов сохраняются в файле output.txt.