Какой текстовый редактор доступен в оболочке Heroku bash? [закрыто]

120

Я пытаюсь обновить httpd.conf в своем приложении Heroku на основе Cedar. Я попал в свой Heroku bash с

 heroku run bash

и нашел каталог conf под apache. Но когда я пытаюсь открыть любой редактор vi, vim или emacs, я не могу найти ни одной из этих программ. Как вы редактируете файлы conf на Heroku?

Дэйв Томас
источник

Ответы:

131

Недавно я превратил исходную суть в плагин heroku cli .

Просто установите:

heroku plugins:install https://github.com/naaman/heroku-vim

И используйте:

heroku vim

Команда heroku vimперенесет вас в оболочку bash с vimустановленным на вашем $PATH. Все, что вам нужно сделать, это переучить пальцы печатать heroku vimвместо heroku run bash.

Нааман Ньюболд
источник
5
@dwenaus Использование vim в динамометрическом стенде - это просто инструмент для устранения неполадок. Невозможно подключиться к работающему дино. Кроме того, даже если бы вы могли (вы можете с помощью взлома ), изменения, которые вы делаете внутри дино, не сохранятся внутри вашего слага. т.е. любые сделанные вами изменения будут потеряны при перезапуске вашего приложения (каждые 24 часа).
Нааман Ньюболд
4
@dwenaus - еще один инструмент для устранения неполадок, который вы можете использовать - и я настоятельно рекомендую использовать его в приложениях QA / staging, НЕ ПРОИЗВОДСТВЕННЫЙ - это hbuild. Он позволяет вам изменять исходный код без коммитов git, поэтому вы можете опробовать что-нибудь на Heroku, не портя историю git.
Нааман Ньюболд
5
Еще один способ избежать испорченной истории git - работать в ветке, а потом очистить ее перед слиянием с мастером. Если ветвь называется debug-heroku, развернуть так: git push heroku debug-heroku:master.
Зубин
8
Не уверен, что это больше работает - yarn завершается с сообщением «Отказ от загрузки репозитория git .... через HTTPS без хэша фиксации - возможная ошибка сертификата?»
Тим Мэлоун
3
Этот ответ больше не работает со heroku-16стеком, так как он больше не libxtдоступен во время выполнения . @funkenstrahlen
Джона Х.
64

Если вы не хотите возиться с плагинами и просто хотите копию nano в своем одноразовом динамометрическом стенде, просто запустите

mkdir /app/nano
curl https://github.com/Ehryk/heroku-nano/raw/master/heroku-nano-2.5.1/nano.tar.gz --location --silent | tar xz -C /app/nano
export PATH=$PATH:/app/nano

Это загрузит копию nano из этого плагина и поместит ее в ваш PATH.

Джеймс
источник
3
Отлично. Теперь я могу редактировать конфиги по мере необходимости
Фелипе
4
Кажется, не работает - запуск nano выдает ошибкуError opening terminal: unknown.
Lewy Blue
@looeee У меня все еще работает. Вы случайно не попали в новый стек heroku-18?
Джеймс
Работает даже на Докку. Спасибо @James
judasane
29

есть edесли ты мазохист.

jcomeau_ictx
источник
4
Как выйти ed?
Джарад
1
в командном режиме q. если вы находитесь в режиме вставки, напечатайте точку .в отдельной строке, а затем введите, чтобы перейти в командный режим. en.wikipedia.org/wiki/Ed_(text_editor)#Example
jcomeau_ictx
22

Похоже, вы можете скачать и установить vim за один сеанс:

#!/usr/bin/env bash
curl https://s3.amazonaws.com/heroku-jvm-buildpack-vi/vim-7.3.tar.gz --output vim.tar.gz
mkdir vim && tar xzvf vim.tar.gz -C vim
export PATH=$PATH:/app/vim/bin

Эта идея была найдена здесь .

Брайан Такита
источник
Как раз то, что мне было нужно! Отредактировал команду, запустил. Теперь heroku может удалить мои изменения за ночь, я сделал свою работу!
mika
1
Смотрите более свежий
nilfalse 06
15

Даже если бы вы могли редактировать файлы с viего помощью, вероятно, ваша проблема не решилась бы, потому что файловая система недолговечна. Смысл ... Если вы редактируете файл через, heroku run bashвы фактически не меняете файл для других дино. Чтобы изменить файл для всех дино, вам нужно либо изменить то, что вы вставляете в репозиторий Git, либо изменить пакет сборки. Подробнее:
https://devcenter.heroku.com/articles/oneoff-admin-ps#formation-dynos-vs-oneoff-dynos

Джеймс Уорд
источник
21
Я хотел бы отладить среду heroku run bash, поэтому vi / vim мне очень пригодится.
Брайан Такита
3
Теперь вы можете подключиться к реальному дино с помощью heroku ps:exec.
Николас Морли
@NicholasMorley Можно, но как заставить сайт / приложение замечать изменения в файле?
x-
@ x-yuri На Heroku нельзя делать так. Чтобы внести изменения, вам необходимо повторно развернуть приложение.
Джеймс Уорд
На самом деле можно. Вы можете взять дино, на котором запущен сайт, использовать ssh ( heroku ps:exec), изменить файл, запустить второй экземпляр сервера, перенаправить порт в дино ( heroku ps:forward 3000). Тогда curl localhost:3000.
x-
6

Отладка на Heroku

Подготовьте дино

После установки naaman/heroku-vimвы можете создать новый временный дино через heroku vim. Как правильно указано в других сообщениях, вы не сможете увидеть свои изменения при просмотре через браузер, потому что изменения не будут распространяться, но ... вы действительно можете просматривать изменения внутри самого дино.

Я только экспериментировал с "просмотром" через завиток, но если бы вы могли попасть lynxтуда или еще лучше получить туннель ssh - это было бы действительно здорово.

Запустить сервер

Веб-сервер не будет работать, когда вы создадите экземпляр heroku-vim, поэтому вам придется сделать это самостоятельно. В моем примере я запускаю php:

~ $ cat Procfile
web: vendor/bin/heroku-php-apache2

Вы можете сами запустить эту команду!

~ $ vendor/bin/heroku-php-apache2 2>/dev/null &
[2] 845

Теперь он работает в фоновом режиме!

сверните ваш сайт

Dynos запускаются на случайных портах. К счастью, вы знаете, какой именно, потому что это $PORTпеременная!

~ $ curl localhost:$PORT
Hello World!

Редактирование

Сделайте свою работу с vim сейчас, но когда вы сохраните файл и снова скручиваете, вы не увидите изменений. Я не понимаю, где он кешируется, но он кешируется. Вы должны убить сервер и перезапустить его.

Перезапуск сервера

  1. Найдите идентификатор процесса

    ~ $ ps -f
    UID        PID  PPID  C STIME TTY          TIME CMD
    u6897        3     1  0 05:34 ?        00:00:00 bash
    u6897      582     3  0 05:53 ?        00:00:00 bash vendor/bin/heroku-php-apache2
    u6897      652   582  0 05:53 ?        00:00:00 bash vendor/bin/heroku-php-apache2
    u6897      653   582  0 05:53 ?        00:00:00 bash vendor/bin/heroku-php-apache2

    Вот 582родительский идентификатор - используйте его.

    kill 582
    
  2. Подождите всего 1 секунду, а затем снова запустите сервер (вы получите новый идентификатор процесса!). Скручивание с помощью той же команды теперь даст вам обновленную страницу.

Михаил
источник
Фактически вы можете перенаправить порт и использовать свой браузер вместо curl.
x-
5

Срочная альтернатива редактированию файла в Heroku:

  1. поместите его копию на какой-нибудь удаленный хост. Мне нравится использовать гист
  2. отредактируйте файл в Gist и, когда закончите, получите необработанный URL-адрес для него
  3. wget необработанный URL-адрес вашего Heroku bash
  4. скопируйте полученный файл по пути к исходному файлу
Вильсон Виейра
источник
Я считаю, что это решение идеально подходит для одноразовой работы, поскольку плагин не требуется.
Стефан
2

Я написал полную статью о том, как редактировать файл на Heroku Dynos с помощью Nano или Vim , но в основном:

  • Вы можете использовать командную строку:

    curl https://s3.amazonaws.com/heroku-jvm-buildpack-vi/vim-7.3.tar.gz --output vim.tar.gz mkdir vim && tar xzvf vim.tar.gz -C vim export PATH=$PATH:/app/vim/bin

  • Вы можете использовать плагины Heroku: heroku-vim
  • Вы можете использовать пакеты сборки Heroku: heroku-buildpack-vip

Надеюсь, поможет!

Чарльз Боше
источник
Плагин не работает для меня vim: error while loading shared libraries: libXt.so.6: cannot open shared object file: No such file or directory. Но buildpack работал.
x-
2

Если вы хотите просто просмотреть содержимое файла:

  1. cd в папку, в которой находится файл, например $ cd folder
  2. запустите команду cat + имя файла, например $ cat filename.csv
Вадим Малаховский
источник
0

альтернативный способ, если ваш сервер запускает php, - это загрузить файловый менеджер PHP, это один файл, и вы можете загрузить его из

http://phpfm.sourceforge.net/

ewwink
источник
0

Можно изменить файлы на динамометрическом стенде и увидеть результат, не нажимая на Heroku:

  1. Установите heroku-buildpack-vimbuildpack:

    $ heroku buildpacks:add \
    https://github.com/carloluis/heroku-buildpack-vim
    
  2. Ssh в дино:

    $ heroku ps:exec
    
  3. Создайте и запустите start.sh:

    #!/usr/bin/env bash
    set -eu
    export DATABASE_URL=...
    bin/rails s -p 4000
    
  4. Прямой порт 4000 (вторая консоль):

    $ heroku ps:forward
    
  5. Откройте localhost:4000в своем браузере.

  6. Остановить start.sh, изменить файл, начать заново, обновить страницу браузера.
х-юри
источник