2

誰かがpythonanywhereでフラスコ移行をうまく使った例を持っていますか? 移行を使用する app.py がどのように見えるかの簡単な例はありますか? 次のようなもの:

from flask import Flask, request, render_template
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.migrate import Migrate, MigrateCommand
from flask.ext.script import Manager
app = Flask(__name__ )
app.secret_key = 'This is really unique and secret'
app.config['SQLALCHEMY_DATABASE_URI'] = '<whatever>'
db = SQLAlchemy(app)
db.create_all()
manager = Manager( app )
migrate = Migrate( app, db )
manager.add_command('db', MigrateCommand )

実行しようとすると、それを見つけます

python app.py db init

移行リポジトリの生成に失敗します。これは pythonanywhere のファイル許可の問題でしょうか?

4

1 に答える 1

1

Flask-Migrate の作成者はこちら。

アイデアは、開発環境で db リポジトリを生成することです。ソースファイルとともにリポジトリをソース管理にコミットする必要があります。

次に、ホスティング サービスにアプリケーションをインストールするときに必要なことは、upgradeコマンドを実行してデータベースを作成し、最新のリビジョンに移行することだけです。

更新:以下のコメントに基づいて、アプリケーションをゼロから開発したいと考えています。これを自分でテストしたところ、db リポジトリを作成し、移行を作成して適用することができました。私がしたことは、pythonanywhere bash コンソールを起動することです。これが私の完全なセッションのコピーです。

17:39 ~ $ mkdir dbtest
17:39 ~ $ cd dbtest
17:39 ~/dbtest $ virtualenv venv
New python executable in venv/bin/python2.7
Also creating executable in venv/bin/python
Installing setuptools............done.
Installing pip...............done.
17:39 ~/dbtest $ . venv/bin/activate
(venv)17:39 ~/dbtest $ pip install flask flask-migrate
...
(venv)17:42 ~/dbtest $ vi dbtest.py
... (entered flask-migrate example code, see below)
(venv)17:47 ~/dbtest $ python dbtest.py 
usage: dbtest.py [-?] {shell,db,runserver} ...

positional arguments:
  {shell,db,runserver}
    shell               Runs a Python shell inside Flask application context.
    db                  Perform database migrations
    runserver           Runs the Flask development server i.e. app.run()

optional arguments:
  -?, --help            show this help message and exit
(venv)17:47 ~/dbtest $ python dbtest.py db init                                                                                                                                                                                             
  Creating directory /home/miguelgrinberg/dbtest/migrations ... done
  Creating directory /home/miguelgrinberg/dbtest/migrations/versions ... done
  Generating /home/miguelgrinberg/dbtest/migrations/README ... done
  Generating /home/miguelgrinberg/dbtest/migrations/alembic.ini ... done
  Generating /home/miguelgrinberg/dbtest/migrations/env.py ... done
  Generating /home/miguelgrinberg/dbtest/migrations/script.py.mako ... done
  Generating /home/miguelgrinberg/dbtest/migrations/env.pyc ... done
  Please edit configuration/connection/logging settings in '/home/miguelgrinberg/dbtest/migrations/alembic.ini' before proceeding.
(venv)17:54 ~/dbtest $ python dbtest.py db migrate                                                                                                                                                                                          
INFO  [alembic.migration] Context impl SQLiteImpl.
INFO  [alembic.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added table 'user'
  Generating /home/miguelgrinberg/dbtest/migrations/versions/1c4aa671e23a_.py ... done
(venv)17:54 ~/dbtest $ python dbtest.py db upgrade                                                                                                                                                                                          
INFO  [alembic.migration] Context impl SQLiteImpl.
INFO  [alembic.migration] Will assume non-transactional DDL.
INFO  [alembic.migration] Running upgrade None -> 1c4aa671e23a, empty message
(venv)17:55 ~/dbtest $ ls -l
total 8
-rw-r--r-- 1 miguelgrinberg registered_users 3072 Sep 28  2014 app.db
-rwxrwxr-x 1 miguelgrinberg registered_users  511 Sep 28 17:48 dbtest.py
drwxrwxr-x 3 miguelgrinberg registered_users  100 Sep 28 17:55 migrations
drwxrwxr-x 6 miguelgrinberg registered_users   52 Sep 28 17:41 venv

これをテストするために使用したサンプル アプリケーションは次のとおりです。

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'

db = SQLAlchemy(app)
migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command('db', MigrateCommand)

class User(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(128))

if __name__ == '__main__':
    manager.run()

すでに移行リポジトリが作成されている可能性はありますか? それともデータベース?

于 2014-09-28T02:30:26.193 に答える