ダウンロードするサーバーにCSVファイルを生成するHeroku bashのRubyスクリプトを実行しました。ダウンロードするためにパブリックフォルダーに移動しようとしましたが、うまくいきませんでした。 Heroku bashコンソールでのすべてのセッションの後にファイルが削除されることがわかりました。Herokubashコンソールから直接ダウンロードするコマンドはありますか?
Heroku dynoファイルシステムは短命です 、非永続的で、dyno間で共有されません。だからあなたがするときheroku run bash
、実際には、他のdynoの一時ファイルシステムに変更を加えることなく、アプリを新たにデプロイして新しいdynoを取得します。
このようなことをしたい場合は、おそらくheroku run bash
セッションまたはすべてを、必要なCSVファイルで応答するHerokuで実行されているWebアプリへのリクエストに含めます。
heroku run bash
からファイルを作成できた場合は、 transfer.sh を使用できます。
転送する前にファイルを暗号化することもできます。
cat <file_name> | gpg -ac -o- | curl -X PUT -T "-" https://transfer.sh/<file_name>.gpg
そして、それをターゲットマシンにダウンロードして復号化します
curl https://transfer.sh/<hash>/<file_name>.gpg | gpg -o- > <file_name>
heroku ps:copy
があります:
#$ heroku help ps:copy
Copy a file from a dyno to the local filesystem
USAGE
$ heroku ps:copy FILE
OPTIONS
-a, --app=app (required) app to run command against
-d, --dyno=dyno specify the dyno to connect to
-o, --output=output the name of the output file
-r, --remote=remote git remote of app to use
DESCRIPTION
Example:
$ heroku ps:copy FILENAME --app murmuring-headland-14719
#$ heroku ps:copy app.json --app=app-example-prod --output=app.json.from-heroku
Copying app.json to app.json.from-heroku
Establishing credentials... done
Connecting to web.1 on ⬢ app-example-prod...
Downloading... ████████████████████████▏ 100% 00:00
これは、heroku run
を介したrun
のdynoで実行されないようです。
#$ heroku ps:copy tmp/some.log --app app-example-prod --dyno run.6039 --output=tmp/some.heroku.log
Copying tmp/some.log to tmp/some.heroku.log
Establishing credentials... error
▸ Could not connect to dyno!
▸ Check if the dyno is running with `heroku ps'
そうです!証明:
#$ heroku ps --app app-example-prod
=== run: one-off processes (1)
run.6039 (Standard-1X): up 2019/08/29 12:09:13 +0200 (~ 16m ago): bash
=== web (Standard-2X): elixir --sname dyno -S mix phx.server --no-compile (2)
web.1: up 2019/08/29 10:41:35 +0200 (~ 1h ago)
web.2: up 2019/08/29 10:41:39 +0200 (~ 1h ago)
web.1
に接続することもできます:
#$ heroku ps:copy tmp/some.log --app app-example-prod --dyno web.1 --output=tmp/some.heroku.log
Copying tmp/some.log to tmp/some.heroku.log
Establishing credentials... done
Connecting to web.1 on ⬢ app-example-prod...
▸ ERROR: Could not transfer the file!
▸ Make sure the filename is correct.
そのため、scp -P PORT tmp/some.log user@Host:/path/some.heroku.log
dynoコマンドラインからSCP run.6039
を使用することにしました。
私は次のようにしました:
最初に私はこのコマンドでheroku bashに入りました:
heroku実行 'sh'
次にディレクトリを作成し、ファイルをそこに移動しました
コミットする前に、gitはあなたの名前とメールアドレスを尋ねてきます。それを偽物にしてください!
100 mgを超えるファイルがある場合は、gitlabにプッシュします。
もっと簡単な方法があれば教えてください!
英語が下手でごめんなさい。
おそらくあなたの必要性は、アプリケーションアーキテクチャの変更、つまりワーカーdynoのようなものを意味することに同意します。ただし、次の手順を実行すると、heroku one-off dynoがscp
を実行できるため、ファイルを転送できます。
scp
ファイル。scp
ファイル。これを行う別の方法(3番目のサーバーを必要としない)は、Patrickの方法を使用することですが、最初に、ファイルをvisible ASCII charatersのみを使用する形式に圧縮します。これにより、空白文字や異常なエンコーディングに関係なく、すべてのファイル。これを行うには、base64
をお勧めします。
ここに私がそれをした方法があります:
heroku run bash
を使用してherokuインスタンスにログオンしますbase64 <your-file>
base64
を使用してこのテキストを直接新しいファイルに解凍します(Macではpbpaste | base64 --decode -o <your-file>
を実行します)クリップボードにすっぽり収まる小さい/迅速な転送の場合:
heroku run bash
を実行しますcat filename
を実行しますこれらの回答の方がはるかに古いので、これは新機能だと思います。すでにここにある優れた答えよりも簡単な解決策を探している私のようなすべての人にとって、Herokuには次のコマンドでファイルを非常に簡単にコピーする機能があります:heroku ps:copy <filename>
予想通り、これは相対パスで機能することに注意してください。 (heroku-18スタックでテストされ、「path/to/file.ext」でファイルをダウンロードします
参考: Heroku docs
Heroku dynoにはsftpがプリインストールされています。私はgitを試しましたが、手順が多すぎたため(新しいssh証明書を生成して毎回githubに追加する必要がありました)、今ではsftpを使用していて、うまく動作します。
別のホスト(dreamhost、hostgator、godaddyなど)が必要ですが、そうした場合、次のことができます。
sftp [email protected]
サーバーのフィンガープリント/ハッシュを受け入れ、パスワードを入力します。
サーバー上で、アップロード先のフォルダーに移動します(cdおよびlsコマンドを使用)。
次に、コマンドput filename.csv
を使用すると、Webホストにアップロードされます。
ファイルを取得するには:filezillaなどのftpクライアントを使用するか、wwwまたはwebサイトのフォルダーパスにあるフォルダーにアップロードした場合はURLにアクセスします。
テキストファイルだけでなく、複数のファイルやバイナリでも機能するため、これは素晴らしいことです。
今私はいくつかのファイルをgitバックアップリポジトリにアップロードするためのシェルスクリプトを作成しました(たとえば、私のapp.db sqliteファイルはgitignoredであり、すべてのデプロイでそれが強制終了されます)
## upload dyno files to git via SSH session
## https://devcenter.heroku.com/changelog-items/1112
# heroku ps:exec
git config --global user.email '[email protected]'
git config --global user.name 'Dmitry Cheva'
rm -rf ./.gitignore
git init
## add each file separately (-f to add git ignored files)
git add app.db -f
git commit -m "backup on `date +'%Y-%m-%d %H:%M:%S'`"
git remote add Origin https://bitbucket.org/cheva/appbackup.git
git Push -u Origin master -f
Gitはデプロイ後に再起動し、環境を保存しません。最初の3つのコマンドを実行する必要があります。次に、ファイルを追加し(無視されたファイルの場合は-f)、リポジトリにプッシュする必要があります(-f、gitではプルが必要になるため)