Trình soạn thảo văn bản nào có sẵn trong Heroku bash shell? [đóng cửa]


120

Tôi đang cố cập nhật httpd.conf trong ứng dụng Heroku dựa trên Cedar của mình. Tôi đã đánh bại Heroku của mình với

 heroku run bash

và tìm thấy thông báo dưới apache. Nhưng khi tôi cố gắng mở bất kỳ trình soạn thảo vi, vim hoặc emacs nào, tôi không thể tìm thấy bất kỳ chương trình nào trong số này. Làm cách nào để bạn chỉnh sửa các tệp conf trên Heroku?


Câu trả lời:


131

Gần đây tôi đã chuyển ý chính gốc thành một plugin cli heroku .

Chỉ cần cài đặt:

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

Và sử dụng:

heroku vim

Các heroku vimlệnh sẽ thả bạn vào một vỏ bash với vimcài đặt trên của bạn $PATH. Tất cả những gì bạn phải làm là đào tạo lại các ngón tay của bạn để gõ heroku vimthay vì heroku run bash.


5
@dwenaus Sử dụng vim trong dyno chỉ là một công cụ khắc phục sự cố. Không thể kết nối với một dyno đang chạy. Ngoài ra, ngay cả khi bạn có thể (bạn có thể làm với hack ), những thay đổi bạn thực hiện bên trong dyno sẽ không tồn tại bên trong slug của bạn. tức là mọi thay đổi bạn đã thực hiện sẽ bị mất khi ứng dụng của bạn được khởi động lại (24 giờ một lần).
Naaman Newbold

4
@dwenaus một công cụ khắc phục sự cố khác mà bạn có thể sử dụng - và tôi thực sự khuyên bạn nên sử dụng công cụ này trên các ứng dụng QA / staging, KHÔNG PHẢI SẢN XUẤT - là hbuild. Nó cho phép bạn thay đổi mã nguồn của mình mà không cần git commit, vì vậy bạn có thể thử nội dung trên Heroku mà không cần ghi lại lịch sử git của mình.
Naaman Newbold

5
Một cách khác để tránh làm xáo trộn lịch sử git là làm việc trong một nhánh và dọn dẹp sau đó trước khi hợp nhất thành chủ. Nếu chi nhánh của bạn được đặt tên debug-heroku, triển khai như thế này: git push heroku debug-heroku:master.
Zubin

8
Không chắc điều này còn hoạt động nữa - sợi thoát với thông báo 'Từ chối tải xuống git repo .... qua HTTPS mà không có mã băm cam kết - lỗi chứng chỉ có thể xảy ra?'
Tim Malone

3
Câu trả lời này không còn hoạt động với heroku-16ngăn xếp, vì nó không còn libxtkhả dụng trong thời gian chạy . @funkenstrahlen
Jonah H.

64

Nếu bạn không muốn lộn xộn với các plugin và chỉ muốn có một bản sao nano trong dyno một lần của mình, chỉ cần chạy

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

Thao tác này sẽ tải xuống một bản sao của nano từ plugin này và đưa nó vào PATH của bạn.


3
Hoàn hảo. Bây giờ tôi có thể chỉnh sửa configs khi cần thiết
Felipe

4
Không có vẻ làm việc - chạy nano cung cấp cho các lỗiError opening terminal: unknown.
Lewy xanh

@looeee Vẫn làm việc cho tôi. Bạn có đang ở trong ngăn xếp heroku-18 mới không?
James

Làm việc ngay cả cho Dokku. Cảm ơn
@James


22

Có vẻ như bạn có thể tải xuống và cài đặt vim cho một phiê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

Ý tưởng này đã được tìm thấy ở đây .


Đúng thứ tôi cần! Đã chỉnh sửa một lệnh, chạy nó. Giờ thì heroku có thể xóa các thay đổi của tôi trong đêm, tôi đã hoàn thành công việc của mình!
mika,

1
Xem thêm các up-to-date kịch bản đằng kia gist.github.com/dvdbng/7375821b20f189c189ab1bd29392c98e
nilfalse

15

Ngay cả khi bạn có thể chỉnh sửa các tệp với vinó có thể sẽ không giải quyết được vấn đề của bạn vì hệ thống tệp là tạm thời. Có nghĩa là ... Nếu bạn chỉnh sửa một tệp thông qua, heroku run bashbạn không thực sự thay đổi tệp cho các dynos khác. Để thay đổi tệp cho tất cả các dynos, bạn cần thay đổi những gì bạn đẩy trong kho lưu trữ Git hoặc thay đổi gói xây dựng. Thêm chi tiết:
https://devcenter.heroku.com/articles/oneoff-admin-ps#formation-dynos-vs-oneoff-dynos


21
Tôi muốn gỡ lỗi môi trường từ heroku run bash, vì vậy vi / vim sẽ rất hữu ích cho tôi.
Brian Takita

3
Bây giờ bạn có thể kết nối với dyno thực tế với heroku ps:exec.
Nicholas Morley

@NicholasMorley Bạn có thể, nhưng bạn sẽ thực hiện các thay đổi trên trang web / ứng dụng như thế nào trong một tệp?
x-yuri

@ x-yuri Bạn không thể làm mọi thứ theo cách đó trên Heroku. Bạn cần triển khai lại ứng dụng để thực hiện thay đổi.
James Ward

Trên thực tế, bạn có thể. Bạn có thể lấy một dyno đang chạy một trang web, ssh vào nó ( heroku ps:exec), thay đổi tệp, khởi động phiên bản thứ hai của máy chủ, chuyển tiếp một cổng tới dyno ( heroku ps:forward 3000). Sau đó curl localhost:3000,.
x-yuri



6

Gỡ lỗi trên Heroku

Chuẩn bị dyno

Sau khi cài đặt, naaman/heroku-vimbạn có thể tạo một dyno tạm thời mới thông qua heroku vim. Như đã chỉ ra một cách chính xác bởi các bài viết khác, bạn sẽ không thể thấy các thay đổi của mình khi xem qua trình duyệt vì các thay đổi sẽ không được phổ biến, nhưng ... bạn thực sự có thể xem các thay đổi từ bên trong chính dyno.

Tôi chỉ mới thử nghiệm "duyệt" qua curl, nhưng nếu bạn có thể lynxvào đó, hoặc tốt hơn là có được một đường hầm ssh - có thể thực sự tuyệt vời.

Khởi động máy chủ

Máy chủ web sẽ không chạy khi bạn khởi tạo heroku-vim, vì vậy bạn sẽ cần phải tự thực hiện. Trong ví dụ của tôi, tôi đang chạy php:

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

Bạn có thể tự bắt đầu lệnh này!

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

Nó hiện đang chạy trong nền!

cuộn trang web của bạn

Dynos khởi động trên các cổng ngẫu nhiên. May mắn thay, bạn biết cái nào vì nó là $PORTbiến!

~ $ curl localhost:$PORT
Hello World!

Chỉnh sửa

Làm điều vim của bạn bây giờ, nhưng khi bạn lưu tệp và cuộn lại - bạn sẽ không thấy các thay đổi. Tôi không hiểu nó được lưu ở đâu, nhưng nó được lưu vào bộ nhớ cache. Bạn phải giết máy chủ và khởi động lại nó.

Khởi động lại máy chủ

  1. Tìm id quy trình

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

    Đây 582là id cha - sử dụng cái đó.

    kill 582
    
  2. Chỉ đợi 1 giây, sau đó khởi động lại máy chủ (bạn sẽ nhận được một id quy trình mới!). Xoăn thông qua cùng một lệnh bây giờ sẽ cung cấp cho bạn trang cập nhật.


Bạn thực sự có thể chuyển tiếp một cổng và sử dụng trình duyệt của mình thay cho curl.
x-yuri

5

Một giải pháp thay thế khẩn cấp để chỉnh sửa tệp trong Heroku:

  1. đặt một bản sao của nó trên một số máy chủ từ xa. Tôi thích sử dụng Gist
  2. chỉnh sửa tệp trên Gist và khi hoàn tất, hãy lấy URL thô cho nó
  3. wget URL thô trên Heroku bash của bạn
  4. sao chép tệp đã tìm nạp vào đường dẫn của tệp gốc

Tôi thấy giải pháp này hoàn hảo cho nhu cầu một lần vì không cần plugin.
Stéphane

2

Tôi đã viết một bài viết hoàn chỉnh về Cách chỉnh sửa tệp trên Heroku Dynos bằng Nano hoặc Vim , nhưng về cơ bản:

  • Bạn có thể sử dụng dòng lệnh:

    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

  • Bạn có thể sử dụng Heroku Plugins: heroku-vim
  • Bạn có thể sử dụng Heroku Buildpacks: heroku-buildpack-vip

Hy vọng nó giúp!


Plugin không làm việc cho tôi: vim: error while loading shared libraries: libXt.so.6: cannot open shared object file: No such file or directory. Nhưng gói xây dựng đã hoạt động.
x-yuri

2

Nếu bạn chỉ muốn xem nội dung của tệp thì:

  1. cd vào thư mục chứa tệp, ví dụ: $ cd folder
  2. chạy lệnh cat + tên tệp, ví dụ: $ cat filename.csv


0

cách thay thế nếu máy chủ của bạn chạy php là tải lên Trình quản lý tệp PHP, đó là một tệp duy nhất và bạn có thể tải xuống từ

http://phpfm.sourceforge.net/


0

Người ta có thể thay đổi các tệp trong dyno và xem kết quả mà không cần đẩy đến Heroku:

  1. Cài đặt heroku-buildpack-vimbuildpack:

    $ heroku buildpacks:add \
    https://github.com/carloluis/heroku-buildpack-vim
    
  2. Ssh vào một dyno:

    $ heroku ps:exec
    
  3. Tạo và chạy start.sh:

    #!/usr/bin/env bash
    set -eu
    export DATABASE_URL=...
    bin/rails s -p 4000
    
  4. Cổng chuyển tiếp 4000 (bảng điều khiển thứ hai):

    $ heroku ps:forward
    
  5. Mở localhost:4000trong trình duyệt của bạn.

  6. Dừng start.sh, thay đổi tệp, bắt đầu lại, làm mới trang trình duyệt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.