2015-04-10-developer-guide-on-upgrading-apps-for-django-1-6-2.md 9.1 KB


title: Hue 3.8にアプリケーションを更新するための開発者ガイド author: Hue Team type: post date: 2015-04-10T00:31:22+00:00 url: /developer-guide-on-upgrading-apps-for-django-1-6-2/ sf_thumbnail_type:

  • none sf_thumbnail_link_type:
  • link_to_post sf_detail_type:
  • none sf_page_title:
  • 1 sf_page_title_style:
  • standard sf_no_breadcrumbs:
  • 1 sf_page_title_bg:
  • none sf_page_title_text_style:
  • light sf_background_image_size:
  • cover sf_social_sharing:
  • 1 sf_sidebar_config:
  • left-sidebar sf_left_sidebar:
  • Sidebar-2 sf_right_sidebar:
  • Sidebar-1 sf_caption_position:
  • caption-right sf_remove_promo_bar:
  • 1 sf_custom_excerpt:
  • | 近日公開される Hue 3.8 の内部では、パフォーマンス、堅牢性、およびセキュリティを向上させるためにいくつかのメジャーな更新を行っています。大きな変更はDjangoの1.4.5から1.6.10アップグレードに起因しており、大幅なパフォーマンスの向上、バグの修正、廃止された機能の削除がなされています。

    この記事では、HueのSDKに対してビルドしているHueの開発者が、アプリケーションをHue 3.8で動作するように更新する方法について説明します。 categories:

  • Hue 3.8

  • Programming


近日公開される Hue 3.8 の内部では、パフォーマンス、堅牢性、およびセキュリティを向上させるためにいくつかのメジャーな更新を行っています。大きな変更はDjangoの1.4.5から1.6.10アップグレードに起因しており、大幅なパフォーマンスの向上、バグの修正、廃止された機能の削除がなされています。

この記事では、HueのSDKに対してビルドしているHueの開発者が、アプリケーションをHue 3.8で動作するように更新する方法について説明します。

django-logo-positive

Pythonのバージョン

現在Pythonの最低要件のバージョンは2.6.5になり、2.6.0は要件を満たしません

Djangoのアップグレード

HueはDjango 1.4.5からDjango1.6.10にアップグレードされています。Django 1.5と1.6のリリースノートにアップグレード方法についての詳細がありますが、これらはHueのアップグレード中に私たちが遭遇した主な問題です。

Json

私たちはJsonのレコードをシンプルに応答するために、Django 1.7のJsonResponseをバックポートしました。以下のように記述していたものが:

def view(request):
    value = { “x”: “y” }
    HttpResponse(json.dumps(value))

今はこのように記述することができます:

def view(request):
    value = { “x”: “y” }
    return JsonResponse(value)

もうひとつ注意すべきなのは、辞書でないものがシリアライズされている場合、Djangoはデフォルトでエラーを発生させるということです。これは古いブラウザへの攻撃 に対する防御です。これは、このエラーを無効にする方法です:

def view(request):
    value = [“x”, “y”]
    return JsonResponse(value, safe=False)

私たちは、開発者はオブジェクトを返すように移行することをお勧めします。Hueも3.8.0に完全に移行されている必要があります。

Url と Reverse

Djangoのdjango.core.urlresolvers.reverse(およびmakoスクリプトの url関数)は自動的に引数をエスケープします。従って、これらの関数の使用は、以下から:

<a href="${ url('useradmin:useradmin.views.edit_user', username=urllib.quote(user.username)) }">...</a>

下記のように更新します:

<a href="${ url('useradmin:useradmin.views.edit_user', username=user.username) }">...</a>

StreamingHttpResponse

ビューからジェネレータを返すために、今はStreamingHttpResponse を使用する必要があります。テストするときは、以下のような記述から:

csv_response = self.c.post(reverse('search:download'), {
         'csv': True,
         'collection': json.dumps(self._get_collection_param(self.collection)),
         'query': json.dumps(QUERY)
 })
csv_response_content = csv_response.content

下記のように変更します:

csv_response = self.c.post(reverse('search:download'), {
        'csv': True,
        'collection': json.dumps(self._get_collection_param(self.collection)),
        'query': json.dumps(QUERY)
 })
csv_response_content = ''.join(csv_response.streaming_content)

 

静的ファイル

NGINXの記事 で説明したように、Hueは現在、NGINXのような独立したウェブサーバで静的ファイルを提供することができます。これは、Hueのフロントエンドがページをレンダリングするために実行する必要がある要求の数を減らすことができます。

without-nginx with-nginx

この変更は、静的なファイルを提供する古い方法を使用しているアプリケーションを動かなくします。また、Hue 3.8.0 とそれ以前のバージョンのHueからの静的ファイルにあてた、ユーザーがバックポートしているパッチとの競合も発生します。

移行をするには以下を行います:

  • /apps/$name/static からの静的なファイルを/apps/$name/src/$name/staticに移動する
  • 以下からのファイルを:

    <link rel=”stylesheet” href=”/metastore/static/css/metastore.css”>

    下記に変更するために、.mako</ code>を更新する:

    <link rel=”stylesheet” href=”${ static(‘metastore/css/metastore.css’) }”>
  • apps/$name/src/help/settings.py の”ICON”を、以下から:

    ICON = “/help/static/art/icon_help_24.png”
    

    下記のように更新する:

    ICON = “help/art/icon_help_24.png”
    
  • PythonのすべてのPythonテンプレートを、以下から:

    def view(request):
    data = {‘image’: “/help/static/art/icon_help_24.png”}
    return render(“template.mako”, request, data)
    

    下記のように更新する:

    from django.contrib.staticfiles.storage import staticfiles_storage

def view(request):

data = {‘image’: staticfiles_storage.url(“/help/static/art/icon_help_24.png”) }
return render(“template.mako”, request, data)

最後に、Hueをdebug=Falseで実行するには、全てのファイルをbuild/staticディレクトリに収集するため、最初にmake appsあるいは./build/env/bin/hue collectstaticのいずれを実行する必要があります。これはdebug=Trueでは必要がなく、Hueは/apps/$name/src/$name/staticディレクトリから静的ファイルを直接提供します。

 

Next!

今月、Django 1.8がリリースされました!これは2番目のLTSリリースであり、1.4のサポートは6ヶ月で終了します。1.8の主な依存関係はPython 2.7が必要になることで、これはまだ現在使用されている古いLTS OSのデフォルトのPythonのバージョンではないということです。

 

いつものように、コメントとフィードバックは hue-user メーリングリストや@gethueまでお気軽に!