0

私はピラミッドフレームワークが初めてで、最近それを使い始めました。ただし、「sdist」で作成された tarball が実稼働仮想環境にどのようにインストールされるかについては、少し混乱しています。私のシナリオは次のとおりです。

  1. 'myapp' という名前のピラミッドで作成したプロジェクトを終了した後、配布 tarball を作成するために python setup.py sdist を実行します。
  2. tarball は「dist」フォルダーの下に作成され、すべてのプロジェクト ソースと .ini ファイル (開発および運用) が含まれます。
  3. 次に、virtualenv --no-site-packages envprod を実行して、新しい運用仮想環境を作成します。
  4. 「myapp」ディストリビューション tarball をインストールするには、envprod/bin/easy_install src/myapp/dist/myapp0-0.tar.gz を実行します。
  5. 次に、プロジェクトのすべての要件のダウンロードとインストールを開始し、アプリケーションのソースを envprod/lib/python2.7/site-packages/myapp の下にインストールします

問題は、development.ini も production.ini も新しい prod 環境にインストールされていないため、.ini ファイルが必要なため「pserve」を実行する方法がないことです。

私は何か間違ったことをしていますか?または、.ini ファイルなしで「myapp」の提供を開始する方法はありますか?

ありがとう!

4

2 に答える 2

2

まず第一に、製品と構成とは何かを誤解しています。.iniファイルはアプリケーションの一部ではありません。nginx 構成と同じ方法は、nginx ディストリビューションの一部ではありません。したがって、通常、製品コードを構成から分離する必要があります。好みに応じて、virtualenv または buildout を使用できます。既に virtualenv を使用しているようですが、Python の卵をインストールすることしかできません。さらに自動化したい場合は、初期セットアップを少し簡単にするピラミッドのビルドアウト レシピのセットを見つけることができます。

通常、.iniファイルには、データベース接続文字列、ポート、またはログ ファイル フォルダーへのパスが含まれます。プロジェクトのサンプル.iniファイルを使用できますが、プロジェクトの卵ファイル内に保存する必要はありません (例ではmyapp0-0.tar.gz.)。

2 番目の部分は、プロジェクトを配布する方法です。ほとんどの python プロジェクトは PyPI からダウンロードできることに気付きました (virtualenv はこれを行います)。作品をオープンソースにしたくない場合は、独自の PyPI サーバーをインストールできます (Google で検索してください。はたくさんあります)。その後、独自の PyPI ミラーを使用するだけで運用サーバーにデプロイできるようになり、プロジェクト ファイルをパブリックにアップロードする必要がなくなります。次のコマンドでアップロードします

$ python setup.py sdist upload

サーバーに文字列をインストールします。

(envprod)$ pip install -i http://my.mirr.or/path $PACKAGE

最後の部分は、本番環境のスケルトンを整理する方法です。.inirequirements.txtファイルの例、初期フォルダー構造を使用して DCVS で別のプロジェクトを作成し、運用サーバーに複製するだけです。setup 、 run 、 static jQuery のダウンロードMakefilesなどの初期作業を行うために使用することを好みます (たとえば、CDN を使用しない場合)。virtualenvpip

于 2013-06-28T22:58:20.347 に答える
0

Mikhail が述べたように、コードと構成は同じであることに注意してください。パッケージを何度も展開し、既にインストールされている構成とデータを上書きしたくない場合があります。データベースが存在し、ファイル システム (sqlite) 上にある場合、パッケージ内でも配布されないことに注意してください。コードを簡単に更新できるようにするために行われていると思います。

パッケージを実稼働環境にデプロイすることが目的の場合は、使用する ini とデータベース (sqlite の場合) の両方をコピーするか、アプリを起動する前に initilize_db スクリプト (bin にインストールされている) を実行するだけです。 . コンソール ロギングがないため、特にロギングに関して、設定が適切であることを確認するために、非プロダクション環境でプロダクション ini をテストすることを常にお勧めします。

開発/運用環境には十分ですが、サードパーティへの配布には問題があるかもしれません。同様の問題に対処しようとしているだけで、主なポイントは setup.py と MANIFEST.in を適切に構成して、卵に必要なものを含め、インストール時にそれらを適切に抽出することだと思います。問題は、easy_install がアプリ フォルダーの外側にあるすべてのファイルをスキップすることです (つまり、1 つ前のディレクトリにある ini ファイル)。

これを回避するには、easy_install をスキップして、tarball を untaz し、プロジェクト フォルダーに入って pip install -e を使用します。--pre ( --pre は、プロジェクトにプレリリースパッケージを含めた場合にのみ必要です。おそらく、私が行ったように、それらがformalchemyに依存しているためです)。これは、他の人に配布する最も簡単な方法のようです。MANIFEST ファイルに明示的に追加してディストリビューションにデータベースを含めない限り、何らかの方法でデータベースを作成して動作させることをお勧めします。

于 2015-01-09T13:57:34.793 に答える