Blogの
mezzanine-admin-backupを
環境情報
OS
CentOS release 6.7 (Final)Python Version
Python 2.7.8Package (必要そうな
ものだけ 抜粋)
Django (1.9.6)
Mezzanine (4.1.0)
インストール手順
Bitbucketの
- pip インストール
pip install mezzanine-admin-backup
OUTPUT
パッケージがないと 言われます… Could not find a version that satisfies the requirement mezzanine-admin-backup (from versions: ) No matching distribution found for mezzanine-admin-backup
Bitbucketから
zipファイルを ダウンロード1。
wget https://bitbucket.org/joshcartme/mezzanine-admin-backup/get/730bdd7ca39d.zip
- unzip
unzip 730bdd7ca39d.zip
- 解凍した
ディレクトリ内に ある admin_backup
ディレクトリをmezzanineプロジェクト内に コピー cd joshcartme-mezzanine-admin-backup-730bdd7ca39d
cp -r admin_backup ${MEZZANINE_PROJECT_DIR}
url.pyの 編集
- urls.py を
編集、 以下の 記述を 追加する。 (コメント記述は なんとなく 他の URL定義に 合わせてみました )
README.mdにbefore the admin site is added
とありますが、
実際以下のように書かないと、 URLが 404 not found
となります。
urlpatterns = i18n_patterns("", # MEZZANINE ADMIN BACKUP # ---------------------- url("^admin/backup/$", "admin_backup.views.admin_backup", name="admin_backup"), # Change the admin prefix here to use an alternate URL for the # admin interface, which would be marginally more secure. ("^admin/", include(admin.site.urls)), )
動作確認
以下の
URLで backup要求が 実行できるので、 URLに アクセスする。 ${YOUR_SITE}/jp/admin/backup/
エラー画面に
遷移
- Apacheの
エラーログを 確認
pg_dumpでエラーが 発生しています…
理由がよくわからない。
pg_dump: [アーカイバ(db)] データベース"xxx"への接続が失敗しました: fe_sendauth: no password supplied
admin_backupフォルダの
views.pyを 開く
admin_backup(request)
という その ものな メソッドが ありますが、
コメントに# requires that a .pgpass file is configured
とあります。
以下の記事の 通り、
postgressのpg_dump
コマンドは、.pgpass
ファイルを置くか、
postgreSQLで接続パスワード自動設定 - yummy-yummy
または、os.environ["PGPASSWORD"]
を設定してあげる 必要が あります。 view.py(一部抜粋)
@staff_member_required def admin_backup(request): ''' Backs up the media and database of a Mezzanine project and returns it as a zip file to the admin requesting it ''' if os.path.exists(BACKUP_DIR): shutil.rmtree(BACKUP_DIR) os.mkdir(BACKUP_DIR) os.mkdir(SQL_BACKUP_DIR) zip_path = '%s/backup-%s.zip' % (BACKUP_DIR, str(now()).replace(' ', '_')) zipf = zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) # backup database[s] for db in settings.DATABASES: db = settings.DATABASES[db] if db['ENGINE'] == 'django.db.backends.sqlite3': if os.path.isabs(db['NAME']): db_file = db['NAME'] else: db_file = '%s/%s' % (settings.PROJECT_ROOT, db['NAME']) shutil.copy(db_file, SQL_BACKUP_DIR) elif db['ENGINE'] == 'django.db.backends.mysql': os.system('mysqldump -u %s %s -p%s > %s/%s.sql' % ( db['USER'], db['NAME'], db['PASSWORD'], SQL_BACKUP_DIR, db['NAME'])) elif db['ENGINE'] == 'django.db.backends.postgresql_psycopg2': # requires that a .pgpass file is configured os.system('pg_dump -Fc -w -U %s -f %s/%s.sql %s' % ( db['USER'], SQL_BACKUP_DIR, db['NAME'], db['NAME'])) zipdir(SQL_BACKUP_DIR, zipf) # add the media library to the zip zipdir(settings.MEDIA_ROOT, zipf) zipf.close() return send_file(zip_path)
settings.pyに
os.environ["PGPASSWORD"]
を追加
postgressとしては、 .pgpass
を置く ことを 推奨しているっぽいですが、
settings.py
にos.environ["PGPASSWORD"]
を追加する ことにしました。
import os # Set Postgress Password # --------------------- os.environ["PGPASSWORD"] = DATABASES["default"]["PASSWORD"]
再度URLに
アクセスする。 ${YOUR_SITE}/jp/admin/backup/
また
エラー画面に 遷移
- Apacheの
エラーログを 確認
unexpected keyword argument 'mimetype'
と出ていました。
以下のエラーと 同様の 事象..
Django 1.7ではmimetypeではなく content_typeを 利用する - Yura YuLife
[Sat May 07 00:51:09 2016] [error] TypeError: __init__() got an unexpected keyword argument 'mimetype' [Sat May 07 00:57:08 2016] [notice] caught SIGTERM, shutting down
- view.pyを
修正
response = HttpResponse(content_type=mimetype)
に修正
def send_file(path, filename = None, mimetype = None): if filename is None: filename = os.path.basename(path) if mimetype is None: mimetype, encoding = mimetypes.guess_type(filename) """以下をコメントアウト""" #response = HttpResponse(mimetype=mimetype) """以下を追加""" response = HttpResponse(content_type=mimetype) response['Content-Disposition'] = 'attachment; filename=%s' %filename response.write(file(path, "rb").read()) return response
再度URLに
アクセスする。 ${YOUR_SITE}/jp/admin/backup/
正常終了!!!
zipファイルがダウンロードされて 落ちてきます。
解凍すると拡張子が sqlの ファイルに なります。
リストア実行 以下の
前提を 満たした 上で、 リストアコマンドを 実行します。 リストア対象の
DATABASEが 存在する こと DATABASE上の
ユーザー(ロール?)が 存在する こと
pg_restore -d ${DATABASE_NAME} -U ${USER_NAME} xxxdb.sql
dumpのpg_restore
での
必要に 応じて…
README.mdにも
settings.py
に
管理画面の
- settings.py#INSTALLED_APPSに
“admin_backup”を 追加
INSTALLED_APPS = ( "admin_backup", "clean_blog", "mezzanine_pagedown",
- settings.py#DASHBOARD_TAGSに
“admin_backup_tags.admin_backup”を 追加
# DASHBOARD_TAGS = ( # ("blog_tags.quick_blog", "mezzanine_tags.app_list"), # ("comment_tags.recent_comments",), # ("mezzanine_tags.recent_actions",), # ) # # MEZZANINE ADMIN BACKUP DASHBOARD_TAGS = ( ("blog_tags.quick_blog", "mezzanine_tags.app_list"), ("admin_backup_tags.admin_backup","comment_tags.recent_comments",), ("mezzanine_tags.recent_actions",), )
- ダッシュボードを
表示
ダッシュボードにBackup
リンクが追加され、
リンク押下でDumpファイルの ダウンロードが 可能に なります。
補足.Backupディレクトリは 変更できる
- views.py(一部抜粋)
デフォルトだと、${PROJECT_ROOT}/admin_backups
に、
Backupディレクトリと、dumpファイル類が 保存されますが、
settings.ADMIN_BACKUP_DIR_NAME
を設定する ことで、
ディレクトリは変更可能です。
あくまで、 PROJECT_ROOT配下なので デフォルトの ままで いい気が しますが …
try: BACKUP_DIR = '%s/%s' % (settings.PROJECT_ROOT, settings.ADMIN_BACKUP_DIR_NAME) except AttributeError: BACKUP_DIR = '%s/admin_backups' % settings.PROJECT_ROOT SQL_BACKUP_DIR = '%s/sql' % BACKUP_DIR
以上です。
コメント