Jaki edytor tekstu jest dostępny w powłoce bash Heroku? [Zamknięte]

120

Próbuję zaktualizować httpd.conf w mojej aplikacji Heroku opartej na Cedar. Dostałem się na mój bash Heroku z

 heroku run bash

i znalazłem conf dir pod apache. Ale kiedy próbuję otworzyć dowolny edytor vi, vim lub emacs, nie mogę znaleźć żadnego z tych programów. Jak edytować pliki conf w Heroku?

Dave Thomas
źródło
Emacs może edytować pliki przez SSH : p

Odpowiedzi:

131

Niedawno zamieniłem pierwotną treść we wtyczkę heroku cli .

Wystarczy zainstalować:

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

I użyć:

heroku vim

heroku vimKomenda spadnie ci do powłoki bash z vimzainstalowanych na dysku $PATH. Wszystko, co musisz zrobić, to ponownie wyszkolić palce, aby heroku vimzamiast pisać heroku run bash.

Naaman Newbold
źródło
5
@dwenaus Używanie vima w hamowni to tylko narzędzie do rozwiązywania problemów. Nie można podłączyć się do działającej hamowni. Ponadto, nawet gdybyś mógł (możesz zhakować ), zmiany, które wprowadzisz wewnątrz hamowni, nie zostaną utrwalone w twoim ślimaku. tzn. wszelkie wprowadzone zmiany zostaną utracone po ponownym uruchomieniu aplikacji (co 24 godziny).
Naaman Newbold
4
@dwenaus innym narzędziem do rozwiązywania problemów, którego możesz użyć - i bardzo polecam używanie go w aplikacjach do kontroli jakości / testowania, a NIE PRODUKCJI - jest hbuild. Pozwala zmienić kod źródłowy bez zatwierdzeń git, dzięki czemu możesz wypróbować różne rzeczy na Heroku bez bałagania w historii git.
Naaman Newbold
5
Innym sposobem na uniknięcie zepsucia historii git jest praca w gałęzi i późniejsze czyszczenie przed scaleniem w master. Jeśli oddział został nazwany debug-heroku, rozmieścić tak: git push heroku debug-heroku:master.
Zubin
8
Nie jestem pewien, czy to już działa - yarn kończy pracę z komunikatem „Odmowa pobrania repozytorium git… przez HTTPS bez wartości skrótu zatwierdzenia - możliwy błąd certyfikatu?”
Tim Malone
3
Ta odpowiedź nie działa już ze heroku-16stosem, ponieważ nie jest już libxtdostępny w czasie wykonywania . @funkenstrahlen
Jonah H.
64

Jeśli nie chcesz bawić się wtyczkami i po prostu chcesz mieć kopię nano w swojej jednorazowej hamowni, po prostu biegnij

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

Spowoduje to pobranie kopii nano z tej wtyczki i umieszczenie jej w PATH.

James
źródło
3
Idealny. Teraz mogę edytować konfiguracje według potrzeb
Felipe
4
Wydaje się, że nie działa - uruchomienie nano powoduje błądError opening terminal: unknown.
Lewy Blue
@looeee Wciąż dla mnie pracuje. Czy przypadkiem znajdujesz się na nowym stosie heroku-18?
James
Pracował nawet dla Dokku. Dzięki @James
judasane
29

tam ed, jeśli jesteś masochistą.

jcomeau_ictx
źródło
4
Jak wyjść ed?
Jarad
1
w trybie poleceń q. jeśli jesteś w trybie wstawiania, wypisz kropkę .w osobnym wierszu, a następnie Enter, aby przejść do trybu poleceń. en.wikipedia.org/wiki/Ed_(text_editor)#Example
jcomeau_ictx
22

Wygląda na to, że możesz pobrać i zainstalować vim na jedną sesję:

#!/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

Ten pomysł został znaleziony tutaj .

Brian Takita
źródło
Dokładnie to, czego potrzebowałem! Edytowałem polecenie, uruchomiłem je. Teraz heroku może usuwać moje zmiany w ciągu nocy, wykonałem swoją pracę!
mika
1
Zobacz więcej aktualnych skryptów gist.github.com/dvdbng/7375821b20f189c189ab1bd29392c98e
nilfalse
15

Nawet gdybyś mógł edytować pliki za vijego pomocą , prawdopodobnie nie rozwiązałoby to problemu, ponieważ system plików jest efemeryczny. Znaczenie ... Jeśli edytujesz plik za pośrednictwem heroku run bash, w rzeczywistości nie zmieniasz pliku dla innych hamowni. Aby zmienić plik dla wszystkich hamowni, musisz albo zmienić to, co wypychasz w repozytorium Git, albo zmienić pakiet kompilacji. Więcej szczegółów:
https://devcenter.heroku.com/articles/oneoff-admin-ps#formation-dynos-vs-oneoff-dynos

James Ward
źródło
21
Chciałbym debugować środowisko z heroku run bash, więc vi / vim byłby dla mnie bardzo przydatny.
Brian Takita,
3
Możesz teraz połączyć się z rzeczywistą hamownią za pomocą heroku ps:exec.
Nicholas Morley
@NicholasMorley Możesz, ale jak możesz dokonać zmian w pliku w witrynie / aplikacji?
x-yuri
@ x-yuri Na Heroku nie można tego robić. Aby wprowadzić zmiany, musisz ponownie wdrożyć aplikację.
James Ward
Właściwie możesz. Możesz wziąć hamownię, na której działa witryna, ssh do niej ( heroku ps:exec), zmienić plik, uruchomić drugą instancję serwera, przekierować port do dyno ( heroku ps:forward 3000). Następnie curl localhost:3000.
x-yuri
6

Debugowanie w Heroku

Przygotuj hamownię

Po zainstalowaniu naaman/heroku-vimmożesz stworzyć nową efemeryczną hamownię przezheroku vim . Jak słusznie wskazano w innych postach, nie będziesz w stanie zobaczyć swoich zmian podczas przeglądania przez przeglądarkę, ponieważ zmiany nie będą propagowane, ale ... faktycznie możesz zobaczyć zmiany z wnętrza samej hamowni.

Eksperymentowałem tylko z "przeglądaniem" przez curl, ale gdybyś mógł się lynxtam dostać , albo jeszcze lepiej zdobyć tunel ssh - mogłoby być naprawdę świetne.

Uruchom serwer

Serwer sieciowy nie będzie działał po utworzeniu instancji heroku-vim, więc musisz to zrobić samodzielnie. W moim przykładzie używam php:

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

Możesz sam uruchomić to polecenie!

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

Teraz działa w tle!

zwiń swoją witrynę

Hamownie uruchamiają się na losowych portach. Na szczęście wiesz, który z nich, ponieważ jest to $PORTzmienna!

~ $ curl localhost:$PORT
Hello World!

Redagowanie

Zrób teraz swoje vim, ale kiedy zapiszesz plik i ponownie zwijasz - nie zobaczysz zmian. Nie rozumiem, gdzie jest zapisany w pamięci podręcznej, ale jest w pamięci podręcznej. Musisz zabić serwer i zrestartować go.

Restartowanie serwera

  1. Znajdź identyfikator procesu

    ~ $ 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

    Oto 582identyfikator rodzica - użyj go.

    kill 582
    
  2. Poczekaj 1 sekundę, a następnie ponownie uruchom serwer (otrzymasz nowy identyfikator procesu!). Curling za pomocą tego samego polecenia spowoduje wyświetlenie zaktualizowanej strony.

Michaił
źródło
W rzeczywistości możesz przekierować port i użyć przeglądarki zamiast curl.
x-yuri
5

Pilna alternatywa edycji pliku w Heroku:

  1. umieść jego kopię na jakimś zdalnym hoście. Lubię używać Gist
  2. edytuj plik w Gist i po zakończeniu pobierz surowy adres URL do niego
  3. wget nieprzetworzony adres URL w twoim Heroku bash
  4. skopiuj pobrany plik do ścieżki oryginalnego pliku
Vilson Vieira
źródło
Uważam, że to rozwiązanie jest idealne na jednorazową potrzebę, ponieważ nie jest wymagana żadna wtyczka.
Stéphane
2

Napisałem cały artykuł o tym, jak edytować plik w Heroku Dynos przy użyciu Nano lub Vim , ale w zasadzie:

  • Możesz użyć wiersza poleceń:

    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

  • Możesz użyć wtyczek Heroku : heroku-vim
  • Możesz użyć Heroku Buildpacks: heroku-buildpack-vip

Mam nadzieję, że to pomoże!

Charles Bochet
źródło
Wtyczka nie działa dla mnie vim: error while loading shared libraries: libXt.so.6: cannot open shared object file: No such file or directory. Ale pakiet kompilacji zadziałał.
x-yuri
2

Jeśli chcesz tylko przejrzeć zawartość pliku, to:

  1. cd do folderu, w którym znajduje się plik, np $ cd folder
  2. uruchom polecenie cat + nazwę pliku, np $ cat filename.csv
Vadim Malakhovski
źródło
0

alternatywnym sposobem, jeśli twój serwer uruchamia php, jest przesłanie menedżera plików PHP, to pojedynczy plik i możesz go pobrać

http://phpfm.sourceforge.net/

ewwink
źródło
0

Można zmienić pliki na hamowni i zobaczyć wynik bez naciskania na Heroku:

  1. Zainstaluj heroku-buildpack-vimpakiet kompilacji:

    $ heroku buildpacks:add \
    https://github.com/carloluis/heroku-buildpack-vim
    
  2. Ssh do hamowni:

    $ heroku ps:exec
    
  3. Utwórz i uruchom start.sh:

    #!/usr/bin/env bash
    set -eu
    export DATABASE_URL=...
    bin/rails s -p 4000
    
  4. Port forward 4000 (druga konsola):

    $ heroku ps:forward
    
  5. Otwórz localhost:4000w przeglądarce.

  6. Zatrzymaj start.sh, zmień plik, zacznij od nowa, odśwież stronę przeglądarki.
x-yuri
źródło