Как экспортировать Ruby Array из консоли Heroku в CSV?
Я хочу экспортировать массив из моей консоли heroku в локальный файл CSV.
В моей текущей ситуации у меня есть ежедневная рейк-задача, которая ищет твиты, которые говорят о моем приложении. Я бы хотел проанализировать эти твиты, чтобы узнать, в какое время они вошли и т.д.:
heroku run console
tweets = Tweet.all
code to export tweets into a local CSV file goes here
Любые идеи будут очень признательны!
Ответы
Ответ 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
Ответ 4
Я бы использовал Taps для экспорта db на ваш локальный компьютер, а затем работал там: https://devcenter.heroku.com/articles/taps
Ответ 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. Мне удалось получить журналы.
Журналы терминалов сохраняются в файле output.txt.