¿Qué editor de texto está disponible en Heroku bash shell? [cerrado]

120

Estoy intentando actualizar httpd.conf en mi aplicación Heroku basada en Cedar. Llegué a mi fiesta de Heroku con

 heroku run bash

y encontré el directorio conf bajo apache. Pero cuando intento abrir cualquier editor vi, vim o emacs, no encuentro ninguno de estos programas. ¿Cómo se editan los archivos conf en Heroku?

Dave Thomas
fuente

Respuestas:

131

Recientemente, convertí la esencia original en un complemento heroku cli .

Simplemente instale:

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

Y use:

heroku vim

El heroku vimcomando lo colocará en un shell bash con viminstalado en su $PATH. Todo lo que tienes que hacer es volver a entrenar tus dedos para escribir en heroku vimlugar de heroku run bash.

Naamán Newbold
fuente
5
@dwenaus Usar vim en un banco de pruebas es solo una herramienta de resolución de problemas. No es posible conectarse a un banco de pruebas en ejecución. Además, incluso si pudiera (puede hacerlo con un truco ), los cambios que realice dentro del dinamómetro no persistirían dentro de su slug. es decir, los cambios realizados se perderán cuando se reinicie la aplicación (cada 24 horas).
Naaman Newbold
4
@dwenaus, otra herramienta de solución de problemas que puede usar, y recomiendo encarecidamente usarla en aplicaciones de control de calidad / preparación, NO en PRODUCCIÓN, es hbuild. Te permite cambiar tu código fuente sin git commits, para que puedas probar cosas en Heroku sin estropear tu historial de git.
Naaman Newbold
5
Otra forma de evitar estropear el historial de git es trabajar en una rama y limpiar después antes de fusionarse con master. Si su rama se llama debug-heroku, desplegar la siguiente manera: git push heroku debug-heroku:master.
Zubin
8
No estoy seguro de que esto funcione más: el hilo sale con 'Negarse a descargar el repositorio de git ... a través de HTTPS sin un hash de confirmación: ¿posible error de certificado?'
Tim Malone
3
Esta respuesta ya no funciona con la heroku-16pila, ya que ya no está libxtdisponible en tiempo de ejecución . @funkenstrahlen
Jonah H.
64

Si no quiere perder el tiempo con los complementos y solo desea una copia de nano en su dinamómetro único, simplemente ejecute

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

Esto descargará una copia de nano de este complemento y lo colocará en su PATH.

James
fuente
3
Perfecto. Ahora puedo editar las configuraciones según sea necesario
Felipe
4
No parece funcionar - ejecutar nano da el errorError opening terminal: unknown.
Lewy Blue
@looeee Trabajando para mí todavía. ¿Estás en la nueva pila de heroku-18 por casualidad?
James
Trabajando incluso para Dokku. Gracias @James
judasane
29

hay edsi eres masoquista.

jcomeau_ictx
fuente
4
Cómo salir ed?
Jarad
1
en el modo de comando, q. si está en modo de inserción, imprima un punto .en una línea por sí mismo, luego ingrese, para llegar al modo de comando. en.wikipedia.org/wiki/Ed_(text_editor)#Example
jcomeau_ictx
22

Parece que puede descargar e instalar vim para una sesión:

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

Esta idea se encontró aquí .

Brian Takita
fuente
¡Justo lo que necesitaba! Editó un comando, lo ejecutó. Ahora heroku puede eliminar mis cambios durante la noche, ¡hice mi trabajo!
mika
1
Ver un script más actualizado
nilfalse
15

Incluso si pudiera editar los archivos con viél, probablemente no resolvería su problema porque el sistema de archivos es efímero. Lo que significa ... Si edita un archivo a través de heroku run bash, en realidad no está cambiando el archivo por otros dynos. Para cambiar un archivo para todos los dynos, debe cambiar lo que empuja en un repositorio de Git o cambiar el paquete de compilación. Más detalles:
https://devcenter.heroku.com/articles/oneoff-admin-ps#formation-dynos-vs-oneoff-dynos

James Ward
fuente
21
Me gustaría depurar el entorno heroku run bash, por lo que vi / vim sería muy útil para mí.
Brian Takita
3
Ahora puede conectarse al banco de pruebas real con heroku ps:exec.
Nicholas Morley
@NicholasMorley Puedes, pero ¿cómo harías que un sitio / aplicación notifique cambios en un archivo?
x-yuri
@ x-yuri No puedes hacer las cosas de esa manera en Heroku. Debe volver a implementar la aplicación para realizar cambios.
James Ward
De hecho, puedes. Puede tomar un dinamómetro que está ejecutando un sitio, entrar en él ( heroku ps:exec), cambiar un archivo, iniciar una segunda instancia del servidor, reenviar un puerto al dinamómetro ( heroku ps:forward 3000). A continuación, curl localhost:3000.
x-yuri
6

Depurando en Heroku

Prepara el dinamómetro

Después de la instalación naaman/heroku-vim, puede crear un nuevo dinamómetro efímero a través de heroku vim. Como se señaló correctamente en otras publicaciones, no podrá ver sus cambios cuando vea a través del navegador porque los cambios no se propagarán, pero ... en realidad puede ver los cambios desde el interior del propio banco de pruebas.

Solo he experimentado con "navegar" a través de curl, pero si pudieras acceder lynxallí, o mejor aún, obtener un túnel ssh, podría ser realmente genial.

Inicie el servidor

El servidor web no se ejecutará cuando cree una instancia de heroku-vim, por lo que deberá hacerlo usted mismo. En mi ejemplo, estoy ejecutando php:

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

¡Puede iniciar este comando usted mismo!

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

¡Ahora se está ejecutando en segundo plano!

riza tu sitio web

Dynos se inicia en puertos aleatorios. ¡Afortunadamente sabes cuál porque es la $PORTvariable!

~ $ curl localhost:$PORT
Hello World!

Edición

Haga lo suyo con vim ahora, pero cuando guarde el archivo y vuelva a enrollarlo, no verá los cambios. No entiendo dónde está almacenado en caché, pero está almacenado en caché. Tienes que matar el servidor y reiniciarlo.

Reiniciar el servidor

  1. Encuentra la identificación del proceso

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

    Aquí 582está la identificación de los padres, úsela.

    kill 582
    
  2. Espere solo 1 segundo y luego inicie el servidor nuevamente (¡obtendrá una nueva identificación de proceso!). Curling a través del mismo comando ahora le dará la página actualizada.

Mikhail
fuente
De hecho, puede reenviar un puerto y usar su navegador en lugar de curl.
x-yuri
5

Una alternativa urgente para editar un archivo en Heroku:

  1. coloque una copia en algún host remoto. Me gusta usar Gist
  2. edite el archivo en Gist y cuando termine obtenga la URL sin procesar
  3. wget la URL sin procesar en tu fiesta Heroku
  4. copie el archivo obtenido en la ruta del archivo original
Vilson Vieira
fuente
Encuentro esta solución perfecta para una necesidad única, ya que no se necesita ningún complemento.
Stéphane
2

Escribí un artículo completo sobre cómo editar un archivo en Heroku Dynos usando Nano o Vim , pero básicamente:

  • Puede usar la línea de comando:

    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

  • Puede usar los complementos de Heroku: heroku-vim
  • Puede utilizar Heroku Buildpacks: heroku-buildpack-vip

¡Espero eso ayude!

Charles Bochet
fuente
El plugin no funcionó para mí: vim: error while loading shared libraries: libXt.so.6: cannot open shared object file: No such file or directory. Pero el paquete de compilación funcionó.
x-yuri
2

Si solo desea ver el contenido del archivo, entonces:

  1. cd a la carpeta donde se encuentra el archivo, por ejemplo $ cd folder
  2. ejecutar el comando cat + el nombre del archivo, por ejemplo $ cat filename.csv
Vadim Malakhovski
fuente
0

la forma alternativa si su servidor ejecuta php es cargar PHP File Manager, es un solo archivo y puede descargarlo desde

http://phpfm.sourceforge.net/

ewwink
fuente
0

Se pueden cambiar archivos en un banco de pruebas y ver el resultado sin presionar a Heroku:

  1. Instalar heroku-buildpack-vimbuildpack:

    $ heroku buildpacks:add \
    https://github.com/carloluis/heroku-buildpack-vim
    
  2. Ssh en un dinamómetro:

    $ heroku ps:exec
    
  3. Cree y ejecute start.sh:

    #!/usr/bin/env bash
    set -eu
    export DATABASE_URL=...
    bin/rails s -p 4000
    
  4. Puerto de reenvío 4000 (segunda consola):

    $ heroku ps:forward
    
  5. Abra localhost:4000en su navegador.

  6. Deténgase start.sh, cambie un archivo, comience de nuevo, actualice la página del navegador.
x-yuri
fuente