7

一部のデータを heroku インスタンスのデータベースにインポートするために manage.py loaddata コマンドを実行する必要がありますが、heroku のイーサリアル ファイル システムには、この点に関していくつかの問題があります。データファイルをherokuリポジトリに追加して、loaddataを実行するたびに更新をプッシュする必要はありません(実行中のさまざまなherokuインスタンスのさまざまなファイルで定期的にこれを行う必要があるため) a) インスタンスのファイル システムにデータ ファイルを常駐させずに、リモート インスタンスで loaddata を実行する方法はありますか。おそらく、データをパイプするか、ローカルファイルを参照するか、b) ファイルをアップロードして同じセッションで loaddata を実行し、コマンドの実行中にファイルがインスタンスに存在できるようにしますか? (インタラクティブセッションが終了するとすぐに消えることに気づきました)

4

4 に答える 4

6

これが思いついたものです(標準入力からのパイプで私の(a)アイデアを使用して)が、heroku実行に関するこの問題のために機能しません:https://github.com/heroku/heroku/issues/256

標準入力を使用するために loaddata をラップする管理コマンド (django eviron をセットアップする場合は、python スクリプトとして記述できます):

# someapp/management/commands/loaddata_stdin.py

import os
import sys
from django.core.management import BaseCommand, call_command


class Command(BaseCommand):

    def transfer_stdin_to_tempfile(self):
        content = sys.stdin.read() # could use readlines if content is expected to be huge
        outfile = open ('temp.json', 'w')
        outfile.write(content)
        outfile.close()
        return outfile.name

    def handle(self, *args, **options):
        tempfile_name = self.transfer_stdin_to_tempfile()
        call_command('loaddata', tempfile_name, traceback=True )
        os.remove(tempfile_name)

使用法:

$ cat some_dump.json | heroku run python manage.py loaddata_stdin.py
于 2013-02-26T03:20:09.480 に答える
1

Heroku のPG Backups アドオンは、これに役立ちます (おそらく、昨年の時点では存在していませんでした): https://devcenter.heroku.com/articles/heroku-postgres-import-export

このチュートリアルでは、SQL ダンプを作成するために使用する方法をかなり簡単に説明してpg_dumpいます (リンクが変更された場合に備えて、ここにコマンドを追加します)。

$ pg_dump -Fc --no-acl --no-owner -h localhost -U <your username> mydb > mydb.dump

個人的mydb.dumpに Dropbox フォルダにアップロードしてから、pgbackups コマンドを実行しました。

$ heroku pgbackups:restore <database url> '<url for mydb.dump>'

あなたの方法を試してみましたが、うまくいきましたが、ファイルサイズが大きくなるにつれていくつかの問題が発生しました。

于 2014-03-06T22:54:32.230 に答える
0

またはloaddata、ローカル DB にアクセスしてから、次の操作を行うことができます。

heroku pg:push mylocaldb HEROKU_POSTGRESQL_MAGENTA --app sushi

ドキュメント: https://devcenter.heroku.com/articles/heroku-postgresql#pg-push

于 2021-05-13T17:01:49.010 に答える