1

複数の設定ファイル (www サイト、モバイル サイト、API など) を持つ Django プロジェクトを持っていて、最近、config/deployment を buildout に切り詰めました。残念ながら、djangorecipe に個別の WSGI ファイルを生成させる唯一の方法は、各サイトを独自のブロックとして指定することです。これにより、サイトごとに完全に個別の django ライブラリが作成されます。

それ自体は実際には問題ではないと思います。回避策は WSGI ファイルを手動で作成することです...しかし、代わりにビルドアウトによってすべてを実現し、同じ django lib を共有する方法があれば、それは理想的です。

これが私が今持っているもので、個別のDjangoインストールを作成します:

[buildout]
parts =
    python
    web
    mobile
    <etc...>

[python]
recipe = zc.recipe.egg
eggs = <etc...>

[web]
recipe = djangorecipe
interpreter = python
version = trunk
project = proj
settings = web_settings
eggs = ${python:eggs}
wsgi = true

[mobile]
recipe = djangorecipe
interpreter = python
version = ${web:version}
project = ${web:project}
settings = mobile_settings
eggs = ${python:eggs}
wsgi = true

<etc...>
4

2 に答える 2

1

Webサーバーの背後で実行するすべてのwsgiスクリプトは、個別のエンティティです。だから:あなたが使用するdjango設定モジュールは唯一の違いですか?つまり、同じディレクトリで2つ以上の別々のサイトを実行しても安全だと本当に確信していますか?実際には共有されるべきではない共有ディレクトリなどに注意してください。あなたがしていることに代わる-おそらくより安全な-は、2つの別々のビルドアウトを持つことです。

一方、2つのdjangorecipeパーツを使用することで、現在は機能していると言います。さて、本当の問題は何ですか?OK、djangoが複製されています。数メガバイト:それはどれほど悪いですか?あなたのウェブサイトに3枚の大きな写真をアップロードしてください、そしてそれは同じ量のスペースを取ります。だから:あなたの現在の解決策はすでに十分ではありませんか?

3番目のコメント:あなたのセットアップはかなりユニークだと思うので、djangorecipe自体でそれをサポートするのは難しいでしょう。あなたはそれを動かしてみることができます、私はレシピがランチパッドにあり、フォークする準備ができていると思います。

于 2011-03-04T09:59:36.797 に答える
1

apache config で環境変数を設定し、wsgi スクリプトで取得することはできないため ( mod-wsgi wikiで説明されています)、最も洗練された解決策は別の wsgi スクリプトを使用することです。

(SO: Django - Can't pass Environment Variable to Apache/Passenger on the WSGI Interfaceに関する関連する議論がありました)

wsgi スクリプトを手動で作成しようとしている場合は、sys.path を手動で処理する必要があります。したがって、django.recipe のセクションが少ない方が簡単なようです。


django-recipe をまったく使用しないことも可能です。wsgi/manage スクリプトを完全に自由にセットアップできるので、少なくとも私はこれを好みます。また、手動で作成したスクリプトを sys.path が自動的に構成された bin フォルダーにラップするように buildout を構成することはそれほど難しくありません。

これを達成する方法は次のとおりです。

  • myproject.scrpits.*django のドキュメントで説明されているように、wsgi を作成し、手動でスクリプトを管理します。ただし、「アクティブな」部分をdef main():メソッドにラップします。次に、スクリプトをモジュールとして使用できます。

  • プロジェクトに適切なsetup.pyスクリプトを作成します。最初のステップで作成したスクリプトがインストールされます。ここでは、エントリ ポイントの部分が重要です。

    from distutils.core import setup
    setup(name='mygroject',
          packages=['myproject'],
          entry_points="""
          [console_scripts]
          manage = myproject.scripts.manage:main
          wsgi = mygroject.scripts.wsgi:main
          """
         )
    
  • ビルドアウトを構成します。 python:scriptsはここで重要です:

    [buildout]
    ...
    # Add directory where your setup.py can be found.
    # I assume that you placed your setup.py in same directory as your buildout file.
    develop=.
    
    [python]
    recipe = zc.recipe.egg:scripts
    # django is no longer instlled by django-recipe so has to be listed in eggs.
    # myproject also has to be listed here.
    eggs= ... django myproject
    # Now scripts from the setup.py:
    scripts = manage wsgi
    # fallowing will create bin/python, might be useful:
    interpreter = python
    
  • buildout は、手順 1 ~ 2 で定義した bin フォルダーにスクリプトを生成します。

于 2011-03-03T23:44:13.990 に答える