Hue 3.8にアプリケーションを更新するための開発者ガイド

Published on 10 April 2015 in Hue 3.8 / Programming - 5 minutes read - Last modified on 15 December 2020

近日公開される 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.51.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のフロントエンドがページをレンダリングするために実行する必要がある要求の数を減らすことができます。

<td>
  <a href="https://cdn.gethue.com/uploads/2015/03/with-nginx.png"><img class="aligncenter wp-image-2338" src="https://cdn.gethue.com/uploads/2015/03/with-nginx.png" alt="with-nginx" width="513" height="319" data-wp-pid="2338" /></a>
</td>
without-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までお気軽に!


comments powered by Disqus

More recent stories

10 June 2021
Hue4.10(新しいSQLエディタコンポーネント、REST API、小さなファイルのインポート、Slackアプリなど)がリリースされました!
Read More
29 May 2021
Sqlスクラッチパッドコンポーネントとパブリック REST API を使用して、5 分で独自の SQL エディター (BYOE) を構築する
Read More
26 May 2021
改善されたHueのImporter -- ファイルの選択、方言の選択、テーブルの作成
Read More