Qual editor de texto está disponível no Heroku bash shell? [fechadas]

120

Estou tentando atualizar o httpd.conf no meu aplicativo Heroku baseado em Cedar. Cheguei ao meu Heroku bash com

 heroku run bash

e encontrou o diretório conf sob apache. Mas quando tento abrir qualquer editor vi, vim ou emacs, não consigo encontrar nenhum desses programas. Como você edita arquivos conf no Heroku?

Dave Thomas
fonte
O Emacs pode editar arquivos sobre SSH : p

Respostas:

131

Recentemente, transformei a essência original em um plugin heroku cli .

Basta instalar:

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

E use:

heroku vim

O heroku vimcomando o levará para um shell bash viminstalado no seu $PATH. Tudo o que você precisa fazer é treinar novamente os dedos para digitar em heroku vimvez de heroku run bash.

Naaman Newbold
fonte
5
@dwenaus O uso do vim em um dinamômetro é apenas uma ferramenta de solução de problemas. Não é possível conectar-se a um dinamômetro em execução. Além disso, mesmo que você pudesse (você pode com um hack ), as alterações feitas dentro do dinamômetro não seriam persistidas dentro da lesma. ou seja, todas as alterações feitas serão perdidas quando o aplicativo for reiniciado (a cada 24 horas).
Naamã Newbold
4
@dwenaus outra ferramenta de solução de problemas que você pode usar - e eu recomendo usar isso em aplicativos de controle de qualidade / teste, NÃO PRODUÇÃO - hbuild. Ele permite que você altere seu código fonte sem o git commit, para que você possa experimentar coisas no Heroku sem mexer no seu histórico do git.
Naaman Newbold
5
Outra maneira de evitar estragar o histórico do git é trabalhar em uma ramificação e limpar depois antes de se fundir no mestre. Se o seu ramo é chamado debug-heroku, implantar assim: git push heroku debug-heroku:master.
Zubin 17/05
8
Não tenho certeza se isso está funcionando mais - o fio sai com 'Recusando-se a baixar o repositório git .... através de HTTPS sem um erro de certificado de possível hash - possível?'
Tim Malone
3
Essa resposta não funciona mais com a heroku-16pilha, pois não está mais libxtdisponível em tempo de execução . @funkenstrahlen
Jonah H.
64

Se você não quiser mexer com plugins e apenas quiser uma cópia do nano em seu dinamômetro único, basta executar

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

Isso fará o download de uma cópia do nano deste plug-in e a colocará no seu PATH.

James
fonte
3
Perfeito. Agora eu posso editar configurações conforme necessário
Felipe
4
Não parece trabalho - correndo nano dá o erroError opening terminal: unknown.
Lewy Azul
@looeee Trabalhando para mim ainda. Você está na nova pilha heroku-18 por acaso?
James
Trabalhando até para Dokku. Obrigado @James
judasane
29

existe edse você é masoquista.

jcomeau_ictx
fonte
4
Como sair ed?
Jarad
1
no modo de comando q. se você estiver no modo de inserção, imprima um ponto .em uma linha sozinha e, em seguida, insira para acessar o modo de comando. pt.wikipedia.org/wiki/Ed_(text_editor)#Example
jcomeau_ictx 04/04
22

Parece que você pode baixar e instalar o vim para uma sessão:

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

Essa ideia foi encontrada aqui .

Brian Takita
fonte
Apenas o que eu precisava! Editou um comando, executou-o. Agora, o heroku pode remover minhas alterações durante a noite. Concluí meu trabalho!
Mika
1
Veja scripts mais atualizados por aí gist.github.com/dvdbng/7375821b20f189c189ab1bd29392c98e
nilfalse
15

Mesmo se você pudesse editar os arquivos com viele, provavelmente não resolveria o seu problema, porque o sistema de arquivos é efêmero. Significado ... Se você editar um arquivo via, heroku run bashna verdade, não está alterando o arquivo para outros dynos. Para alterar um arquivo para todos os dynos, é necessário alterar o que você envia em um repositório Git ou alterar o buildpack. Mais detalhes:
https://devcenter.heroku.com/articles/oneoff-admin-ps#formation-dynos-vs-oneoff-dynos

James Ward
fonte
21
Gostaria de depurar o ambiente heroku run bash, para que o vi / vim seja muito útil para mim.
Brian Takita
3
Agora você pode se conectar ao dinamômetro atual com heroku ps:exec.
Nicholas Morley
@NicholasMorley Você pode, mas como você faria um aviso de site / aplicativo mudar em um arquivo?
x-yuri
@ x-yuri Você não pode fazer as coisas dessa maneira no Heroku. Você precisa reimplementar o aplicativo para fazer alterações.
James Ward
Na verdade você pode. Você pode pegar um dinamômetro que está executando um site, ssh nele ( heroku ps:exec), alterar um arquivo, iniciar uma segunda instância do servidor, encaminhar uma porta para o dinamômetro ( heroku ps:forward 3000). Então curl localhost:3000,.
x-yuri
6

Depurando no Heroku

Prepare o dinamômetro

Após a instalação, naaman/heroku-vimvocê pode criar um novo dinamômetro efêmero viaheroku vim . Como apontado corretamente em outras postagens, você não poderá ver suas alterações ao visualizar através do navegador, porque as alterações não serão propagadas, mas ... você pode realmente visualizar as alterações de dentro do dinamômetro.

Eu apenas experimentei "navegar" via curl, mas se você pudesse chegar lynxlá, ou melhor ainda, obter um túnel ssh - poderia ser realmente ótimo.

Iniciar o servidor

O servidor da web não estará funcionando quando você instanciar o heroku-vim, portanto, você precisará fazer isso sozinho. No meu exemplo, estou executando o php:

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

Você pode iniciar esse comando você mesmo!

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

Agora está sendo executado em segundo plano!

enrolar seu site

Dynos iniciam em portas aleatórias. Felizmente, você sabe qual deles é a $PORTvariável!

~ $ curl localhost:$PORT
Hello World!

Edição

Faça a sua coisa vim agora, mas quando você salvar o arquivo e enrolar novamente - você não verá as alterações. Não entendo onde é armazenado em cache, mas é armazenado em cache. Você precisa matar o servidor e reiniciá-lo.

Reiniciando o servidor

  1. Encontre o ID do processo

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

    Aqui 582está a identificação dos pais - use isso.

    kill 582
    
  2. Aguarde apenas 1 segundo e, em seguida, inicie o servidor novamente (você receberá uma nova identificação de processo!). A ondulação através do mesmo comando agora fornecerá a página atualizada.

Mikhail
fonte
Você pode realmente encaminhar uma porta e usar seu navegador no lugar de curl.
x-yuri
5

Uma alternativa urgente para editar um arquivo no Heroku:

  1. coloque uma cópia em algum host remoto. Eu gosto de usar o Gist
  2. edite o arquivo no Gist e, quando terminar, obtenha o URL bruto
  3. wget o URL bruto na sua festança Heroku
  4. copie o arquivo buscado para o caminho do arquivo original
Vilson Vieira
fonte
Acho esta solução perfeita para uma necessidade única, pois nenhum plug-in é necessário.
Stéphane
2

Eu escrevi um artigo completo sobre Como editar um arquivo no Heroku Dynos usando o Nano ou Vim , mas basicamente:

  • Você pode usar a linha 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

  • Você pode usar os plugins Heroku: heroku-vim
  • Você pode usar o Heroku Buildpacks: heroku-buildpack-vip

Espero que ajude!

Charles Bochet
fonte
O plug-in não funcionou para mim: vim: error while loading shared libraries: libXt.so.6: cannot open shared object file: No such file or directory. Mas o buildpack funcionou.
x-yuri
2

Se você deseja apenas visualizar o conteúdo do arquivo, então:

  1. cd para a pasta onde o arquivo está localizado, por exemplo $ cd folder
  2. execute o comando cat + o nome do arquivo, por exemplo $ cat filename.csv
Vadim Malakhovski
fonte
0

da maneira alternativa, se o seu servidor executar o php for fazer upload do PHP File Manager, ele será um arquivo único e você poderá baixá-lo em

http://phpfm.sourceforge.net/

ewwink
fonte
0

Pode-se mudar os arquivos em um dinamômetro e ver o resultado sem ir para o Heroku:

  1. Instale o heroku-buildpack-vimbuildpack:

    $ heroku buildpacks:add \
    https://github.com/carloluis/heroku-buildpack-vim
    
  2. Ssh em um dinamômetro:

    $ heroku ps:exec
    
  3. Crie e execute start.sh:

    #!/usr/bin/env bash
    set -eu
    export DATABASE_URL=...
    bin/rails s -p 4000
    
  4. Porta de encaminhamento 4000 (segundo console):

    $ heroku ps:forward
    
  5. Abra localhost:4000no seu navegador.

  6. Pare start.sh, altere um arquivo, inicie novamente, atualize a página do navegador.
x-yuri
fonte