Heroku bash shell 中提供了哪些文本编辑器? [关闭]

Posted

技术标签:

【中文标题】Heroku bash shell 中提供了哪些文本编辑器? [关闭]【英文标题】:What text editor is available in Heroku bash shell? [closed] 【发布时间】:2012-09-21 22:04:43 【问题描述】:

我正在尝试在基于 Cedar 的 Heroku 应用中更新 httpd.conf。我用

进入了我的 Heroku bash
 heroku run bash

并在 apache 下找到了 conf 目录。但是当我尝试打开任何编辑器 vi、vim 或 emacs 时,我找不到任何这些程序。如何在 Heroku 上编辑 conf 文件?

【问题讨论】:

Emacs 可以edit files over SSH :p 【参考方案1】:

我最近将original gist 变成了heroku cli plugin。

只需安装:

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

并使用:

heroku vim

heroku vim 命令会将您放入一个 bash shell,并在您的$PATH 上安装了vim。您所要做的就是重新训练您的手指输入heroku vim 而不是heroku run bash

【讨论】:

@dwenaus 在 dyno 中使用 vim 只是一个故障排除工具。无法连接到正在运行的测功机。此外,即使您可以(您可以使用hack),您在测功机中所做的更改也不会保留在您的 slug 中。即,当您的应用重新启动时(每 24 小时),您所做的任何更改都会丢失。 @dwenaus 是您可以使用的另一个故障排除工具——我强烈建议在 QA/staging 应用程序上使用它,而不是在生产应用程序上使用它——hbuild。它允许您在不提交 git 的情况下更改源代码,因此您可以在 Heroku 上尝试一些东西而不会破坏您的 git 历史记录。 另一种避免弄乱 git 历史的方法是在分支中工作,然后在合并到 master 之前进行清理。如果您的分支名为 debug-heroku,请像这样部署:git push heroku debug-heroku:master 不确定这是否有效 - yarn 退出并显示“拒绝下载 git repo .... over HTTPS over HTTPS without a commit hash - 可能的证书错误?” 这个答案不再适用于heroku-16 堆栈,因为它是no longer has libxt available at runtime。 @funkenstrahlen【参考方案2】:

如果您不想乱用插件,只想在一次性测功机中复制一份 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

这将从 this plugin 下载 nano 的副本并将其放入您的 PATH。

【讨论】:

完美。现在我可以根据需要编辑配置了 似乎不起作用 - 运行 nano 会出现错误 Error opening terminal: unknown. @looeee 还在为我工作。您是否在新的 heroku-18 堆栈上? 甚至为 Dokku 工作。谢谢@James【参考方案3】:

如果你是受虐狂,这里有 ed

【讨论】:

如何退出ed 在命令模式下,q。如果您处于插入模式,请在一行上单独打印一个点.,然后输入,进入命令模式。 en.wikipedia.org/wiki/Ed_(text_editor)#Example【参考方案4】:

看起来你可以为一个会话下载并安装 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

这个想法是在here找到的。

【讨论】:

正是我需要的!编辑一个命令,运行它。现在 heroku 可以在晚上删除我的更改,我完成了我的工作! 在那里查看更多最新脚本gist.github.com/dvdbng/7375821b20f189c189ab1bd29392c98e【参考方案5】:

即使您可以使用vi 编辑文件,它也可能无法解决您的问题,因为文件系统是短暂的。含义...如果您通过heroku run bash 编辑文件,您实际上并没有为其他测功机更改文件。要更改所有 dynos 的文件,您需要更改您在 Git 存储库中推送的内容或更改 buildpack。更多详情:https://devcenter.heroku.com/articles/oneoff-admin-ps#formation-dynos-vs-oneoff-dynos

【讨论】:

我想从heroku run bash调试环境,所以vi/vim对我很有用。 您现在可以使用heroku ps:exec 连接到实际测功机。 @NicholasMorley 可以,但是如何让网站/应用程序通知文件中的更改? @x-yuri 你不能在 Heroku 上那样做。您需要重新部署应用才能进行更改。 其实可以的。您可以使用正在运行站点的测功机,通过 ssh 进入它(heroku ps:exec),更改文件,启动服务器的第二个实例,将端口转发到测功机(heroku ps:forward 3000)。然后,curl localhost:3000.【参考方案6】:

The plugin provided by Naaman Newbold 不再使用heroku-16 堆栈,所以我用这个updated gist 创建了一个新的plugin。

安装:

heroku plugins:install @jasonheecs/heroku-vim

并使用:

heroku vim

【讨论】:

【参考方案7】:

在 Brian Takita 的回答链接上的 cmets 中,有更新的解决方案可以让 Vim 在 Heroku 控制台上工作:

https://gist.github.com/dvdbng/7375821b20f189c189ab1bd29392c98e

为我节省了很多时间! :)

【讨论】:

【参考方案8】:

在 Heroku 上调试

准备测功机

安装naaman/heroku-vim 后,您可以通过heroku vim 创建一个新的临时测功机。正如其他帖子正确指出的那样,您在通过浏览器查看时将无法看到您的更改,因为更改不会被传播,但是......您实际上可以从测功机本身内部查看更改。

我只尝试过通过 curl 进行“浏览”,但如果您可以在那里获得lynx,或者更好的是获得一个 ssh 隧道,那就太好了。

启动服务器

当你实例化 heroku-vim 时,web 服务器不会运行,所以你需要自己做。在我的示例中,我正在运行 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 操作,但是当您保存文件并再次 curl 时 - 您将看不到更改。我不明白它被缓存在哪里,但它被缓存了。您必须杀死服务器并重新启动它。

重启服务器

    查找进程id

    ~ $ 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 是父ID——使用它。

    kill 582
    

    等待 1 秒,然后再次启动服务器(您将获得一个新的进程 ID!)。通过相同的命令进行卷曲现在将为您提供更新的页面。

【讨论】:

您实际上可以forward a port 并使用您的浏览器代替curl【参考方案9】:

在 Heroku 中编辑文件的紧急替代方法:

    将它的副本放在某个远程主机上。我喜欢用 Gist 在 Gist 上编辑文件,完成后获取它的原始 URL wget Heroku bash 上的原始 URL 将获取的文件复制到原文件路径

【讨论】:

我发现这个解决方案非常适合一次性需求,因为不需要插件。【参考方案10】:

我在How to Edit a File on Heroku Dynos using Nano or 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 Buildpacks:heroku-buildpack-vip

希望对你有帮助!

【讨论】:

插件对我不起作用:vim: error while loading shared libraries: libXt.so.6: cannot open shared object file: No such file or directory。但是 buildpack 确实有效。【参考方案11】:

如果您只想查看文件的内容,那么:

    cd 到文件所在的文件夹,例如$ cd folder 运行 cat 命令 + 文件名,例如$ cat filename.csv

【讨论】:

【参考方案12】:

现在有许多包含 vim 的构建包:https://elements.heroku.com/search/buildpacks?q=vim

您可以使用 support buildpack support 将其中之一添加到相关的 Heroku 应用程序中。

【讨论】:

【参考方案13】:

如果您的服务器运行 php,另一种方法是上传 PHP 文件管理器,它是单个文件,您可以从那里下载它

http://phpfm.sourceforge.net/

【讨论】:

【参考方案14】:

可以在测功机中更改文件并查看结果,而无需推送到 Heroku:

    安装heroku-buildpack-vim buildpack:

    $ heroku buildpacks:add \
    https://github.com/carloluis/heroku-buildpack-vim
    

    SSH 进入测功机:

    $ heroku ps:exec
    

    创建并运行 start.sh:

    #!/usr/bin/env bash
    set -eu
    export DATABASE_URL=...
    bin/rails s -p 4000
    

    转发端口 4000(第二个控制台):

    $ heroku ps:forward
    

    在浏览器中打开localhost:4000

    停止start.sh,换个文件,重新开始,刷新浏览器页面。

【讨论】:

【参考方案15】:

我更喜欢 Nano 编辑器,你可以使用以下 buildpack... https://github.com/velizarn/heroku-buildpack-nano

【讨论】:

以上是关于Heroku bash shell 中提供了哪些文本编辑器? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Linux中shell 的类型都有哪些。

Linux shell基础

bash基本特性

shell提供了哪些功能

第二十二课 Shell的基础知识

Linux Bash语法总结