1

私はDjango、S3(boto)を備えたdjango-storagesを簡単なサムネイルと組み合わせて使用​​しています。私のローカル マシンでは、すべてが期待どおりに機能します。サムネイルが存在しない場合は、サムネイルが作成されて S3 にアップロードされ、easy-thumbnails データベース テーブルに保存されます。しかし、問題は、コードを本番サーバーにプッシュしても機能せず、簡単なサムネイルが空の画像 SRC を出力することです。

既に気づいたことは、ローカル マシンでサムネイルを作成するとき、イージー サムネイル パスではバック スラッシュが使用され、Linux サーバーではスラッシュが必要であるということです。データベースのスラッシュを変更すると、サムネイルは Linux マシンに表示されますが、Linux (運用) マシンではまだサムネイルを生成できません。

単純な django-storages テストは失敗します:

>>> import django
>>> from django.core.files.storage import default_storage
>>> file = default_storage.open('storage_test', 'w')

出力: django.core.exceptions.ImproperlyConfigured: DEFAULT_FILE_STORAGE の設定を要求しましたが、設定が構成されていません。設定にアクセスする前に、環境変数 DJANGO_SETTINGS_MODULE を定義するか、settings.configure() を呼び出す必要があります。

私が行った場合:

>>> from base.settings import staging
>>> from django.conf import settings
>>> settings.configure(staging)

これは機能します(settingsbase.py、staging.py、development.py、およびproduction.pyの4つの設定ファイルを含むディレクトリがあります)

私の運用サーバーでは、構成ファイルが正しく読み込まれていないようです (ただし、Web サイトの残りの部分は正常に動作します)。設定ファイルに追加THUMBNAIL_DEBUG = Trueしても、easy-thumbnails のデバッグはまだ機能しません (ローカル マシンでは機能します)。

何が問題になる可能性がありますか? 私はすでに10時間以上デバッグしています。

4

3 に答える 3

1

設定をリファクタリングして、よりオブジェクト指向の構造を使用してみてください。[David Cramer from Disqus:

http://justcramer.com/2011/01/13/settings-in-django/

サーバー固有の設定をlocal_settings.pyファイルに入れ、必要最小限のバージョンをexample_local_settings.pyリポジトリ内に保存できます。

ステージング サーバーまたはレビュー サーバーに固有の設定が多数ある場合は、個別の設定ファイルを引き続き使用できますが、完全なデータベース資格情報をコード リポジトリに保存したくないため、local_settings.pyとにかくカスタマイズする必要があります。の上部にインポートを追加することで、含める設定を定義できますlocal_settings.py

from project.conf.settings.dev import *

次に、DJANGO_SETTINGS_MODULE常に同じ場所を指すように設定できます。これは、Django docs で概説されているように呼び出す代わりになります。settings.configure()

https://docs.djangoproject.com/en/dev/topics/settings/#either-configure-or-django-settings-module-is-required

local_settings.pyは常にインポートされるため、本番サーバーの設定は確実にインポートされることがわかります。

于 2013-03-20T18:47:49.163 に答える
0

最初に使用してみてください:

python manage.py shell --settings=settings/staging

正しい設定ファイルでシェルをロードしてからデバッグを試みる

于 2013-03-25T15:06:18.743 に答える
0

なんらかの理由で、S3 とテンプレート言語の簡単なサムネイルは互いにうまくいかないように見えました...パスの問題は、おそらくいつか解決される可能性があります。

私の解決策 (読み取り: 回避策) は、サムネイルの生成をイメージ フィールド内のモデルに移動することでした。次に例を示します。

avatar = ThumbnailerImageField(upload_to = avatar_file_name, resize_source=dict(size=(125, 125), crop="smart"), blank = True)

完全を期すために:

def avatar_file_name(instance, filename):
    path = "%s/avatar.%s" % (str(instance.user.username), filename.split('.')[1])
    if os.path.exists(settings.MEDIA_ROOT + path):
        os.remove(settings.MEDIA_ROOT + path)   
    return path
于 2014-01-11T20:10:28.910 に答える