Quel éditeur de texte est disponible dans Heroku bash shell? [fermé]

120

J'essaye de mettre à jour httpd.conf dans mon application Heroku basée sur Cedar. Je suis arrivé à ma fête Heroku avec

 heroku run bash

et a trouvé le répertoire conf sous apache. Mais lorsque j'essaie d'ouvrir un éditeur vi, vim ou emacs, je ne trouve aucun de ces programmes. Comment éditez-vous les fichiers de configuration sur Heroku?

Dave Thomas
la source

Réponses:

131

J'ai récemment transformé l' essentiel en un plugin heroku cli .

Installez simplement:

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

Et utilise:

heroku vim

La heroku vimcommande vous déposera dans un shell bash avec viminstallé sur votre $PATH. Tout ce que vous avez à faire est de recycler vos doigts pour taper heroku vimau lieu de heroku run bash.

Naaman Newbold
la source
5
@dwenaus L'utilisation de vim dans un dyno n'est qu'un outil de dépannage. Il n'est pas possible de se connecter à un dyno en cours d'exécution. De plus, même si vous le pouviez (vous le pouvez avec un hack ), les changements que vous apportez à l'intérieur du dynamomètre ne seraient pas persistants dans votre slug. c'est-à-dire que toutes les modifications que vous avez apportées seront perdues au redémarrage de votre application (toutes les 24 heures).
Naaman Newbold
4
@dwenaus est un autre outil de dépannage que vous pouvez utiliser - et je vous recommande vivement de l'utiliser sur les applications QA / staging, PAS LA PRODUCTION - est hbuild. Il vous permet de changer votre code source sans commits git, vous pouvez donc essayer des trucs sur Heroku sans gâcher votre historique git.
Naaman Newbold
5
Un autre moyen d'éviter de gâcher l'historique de git est de travailler dans une branche et de nettoyer ensuite avant de fusionner dans master. Si votre branche est nommé debug-heroku, déployer comme ceci: git push heroku debug-heroku:master.
Zubin
8
Je ne suis pas sûr que cela fonctionne plus - yarn se termine avec 'Refus de télécharger le dépôt git .... sur HTTPS sans hachage de validation - erreur de certificat possible?'
Tim Malone
3
Cette réponse ne fonctionne plus avec la heroku-16pile, car elle n'est plus libxtdisponible au moment de l'exécution . @funkenstrahlen
Jonah H.
64

Si vous ne voulez pas jouer avec des plugins et que vous voulez juste une copie de nano dans votre dyno unique, lancez simplement

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

Cela téléchargera une copie de nano à partir de ce plugin et la placera dans votre PATH.

James
la source
3
Parfait. Maintenant, je peux modifier les configurations au besoin
Felipe
4
Ne semble pas fonctionner - l'exécution de nano donne l'erreurError opening terminal: unknown.
Lewy Blue
@looeee Travaille encore pour moi. Êtes-vous sur la nouvelle pile heroku-18 par hasard?
James
Travailler même pour Dokku. Merci @James
judasane
29

il y a edsi vous êtes masochiste.

jcomeau_ictx
la source
4
Comment sortir ed?
Jarad
1
en mode de commande, q. si vous êtes en mode insertion, imprimez un point .sur une ligne seule, puis entrez, pour passer en mode commande. en.wikipedia.org/wiki/Ed_(text_editor)#Example
jcomeau_ictx
22

Il semble que vous puissiez télécharger et installer vim pendant une session:

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

Cette idée a été trouvée ici .

Brian Takita
la source
Juste ce dont j'avais besoin! J'ai édité une commande, l'a exécutée. Maintenant heroku peut supprimer mes modifications au cours de la nuit, j'ai fait mon travail!
mika
1
Voir plus de script à jour là-bas gist.github.com/dvdbng/7375821b20f189c189ab1bd29392c98e
nilfalse
15

Même si vous pouviez éditer les fichiers avec, vicela ne résoudrait probablement pas votre problème car le système de fichiers est éphémère. Signification ... Si vous éditez un fichier via heroku run bashvous ne changez pas réellement le fichier pour d'autres dynos. Pour changer un fichier pour tous les dynos, vous devez soit changer ce que vous poussez dans un dépôt Git, soit changer le buildpack. Plus de détails:
https://devcenter.heroku.com/articles/oneoff-admin-ps#formation-dynos-vs-oneoff-dynos

James Ward
la source
21
Je voudrais déboguer l'environnement à partir de heroku run bash, donc vi / vim me serait très utile.
Brian Takita
3
Vous pouvez maintenant vous connecter au dyno réel avec heroku ps:exec.
Nicholas Morley
@NicholasMorley Vous pouvez, mais comment feriez-vous pour un site / une application de notification des modifications dans un fichier?
x-yuri
@ x-yuri Vous ne pouvez pas faire les choses de cette façon sur Heroku. Vous devez redéployer l'application pour apporter des modifications.
James Ward
En fait, vous pouvez. Vous pouvez prendre un dyno qui exécute un site, y ssh ( heroku ps:exec), modifier un fichier, démarrer une deuxième instance du serveur, transférer un port vers le dyno ( heroku ps:forward 3000). Ensuite, curl localhost:3000.
x-yuri
6

Débogage sur Heroku

Préparez le dyno

Après l'installation, naaman/heroku-vimvous pouvez créer un nouveau dynamomètre éphémère via heroku vim. Comme indiqué correctement par d'autres articles, vous ne pourrez pas voir vos modifications lors de la visualisation via le navigateur car les modifications ne seront pas propagées, mais ... vous pouvez en fait afficher les modifications depuis l'intérieur du dyno lui-même.

Je n'ai expérimenté que la «navigation» via curl, mais si vous pouviez y aller lynx, ou mieux encore obtenir un tunnel ssh, cela pourrait être vraiment génial.

Démarrez le serveur

Le serveur Web ne fonctionnera pas lorsque vous instanciez heroku-vim, vous devrez donc le faire vous-même. Dans mon exemple, j'utilise php:

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

Vous pouvez lancer cette commande vous-même!

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

Il tourne maintenant en arrière-plan!

curl votre site Web

Les Dynos démarrent sur des ports aléatoires. Heureusement, vous savez lequel car c'est la $PORTvariable!

~ $ curl localhost:$PORT
Hello World!

Édition

Faites votre truc vim maintenant, mais lorsque vous enregistrez le fichier et que vous le bouclez à nouveau, vous ne verrez pas les modifications. Je ne comprends pas où il est mis en cache, mais il est mis en cache. Vous devez tuer le serveur et le redémarrer.

Redémarrage du serveur

  1. Trouvez l'identifiant du processus

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

    Voici 582l'identifiant du parent - utilisez-le.

    kill 582
    
  2. Attendez 1 seconde, puis redémarrez le serveur (vous obtiendrez un nouvel identifiant de processus!). Le curling via la même commande vous donnera maintenant la page mise à jour.

Mikhail
la source
Vous pouvez en fait transférer un port et utiliser votre navigateur à la place de curl.
x-yuri
5

Une alternative urgente pour éditer un fichier dans Heroku:

  1. placez-en une copie sur un hôte distant. J'aime utiliser Gist
  2. éditez le fichier sur Gist et une fois terminé, obtenez l'URL brute de celui-ci
  3. wget l'URL brute de votre Heroku bash
  4. copier le fichier récupéré dans le chemin du fichier d'origine
Vilson Vieira
la source
Je trouve cette solution parfaite pour un besoin ponctuel car aucun plugin n'est nécessaire.
Stéphane
2

J'ai écrit un article complet sur Comment éditer un fichier sur Heroku Dynos en utilisant Nano ou Vim , mais en gros:

  • Vous pouvez utiliser la ligne de commande:

    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

  • Vous pouvez utiliser les plugins Heroku: heroku-vim
  • Vous pouvez utiliser Heroku Buildpacks: heroku-buildpack-vip

J'espère que ça aide!

Charles Bochet
la source
Le plugin ne fonctionne pas pour moi: vim: error while loading shared libraries: libXt.so.6: cannot open shared object file: No such file or directory. Mais le buildpack a fonctionné.
x-yuri
2

Si vous souhaitez simplement afficher le contenu du fichier, alors:

  1. cd dans le dossier où se trouve le fichier, par exemple $ cd folder
  2. exécuter la commande cat + le nom du fichier, par exemple $ cat filename.csv
Vadim Malakhovski
la source
0

la façon alternative si votre serveur exécute php est de télécharger PHP File Manager, un seul fichier et vous pouvez le télécharger à partir de

http://phpfm.sourceforge.net/

ewwink
la source
0

On peut changer les fichiers dans un dyno et voir le résultat sans pousser vers Heroku:

  1. Installez heroku-buildpack-vimbuildpack:

    $ heroku buildpacks:add \
    https://github.com/carloluis/heroku-buildpack-vim
    
  2. Ssh dans un dyno:

    $ heroku ps:exec
    
  3. Créez et exécutez start.sh:

    #!/usr/bin/env bash
    set -eu
    export DATABASE_URL=...
    bin/rails s -p 4000
    
  4. Transférer le port 4000 (deuxième console):

    $ heroku ps:forward
    
  5. Ouvrez localhost:4000dans votre navigateur.

  6. Arrêtez start.sh, modifiez un fichier, recommencez, actualisez la page du navigateur.
x-yuri
la source