rare-cheesecakeの日記

主に技術情報を不定期更新していきます。今注目しているのはPythonとDevOpsです。

Falconを使ってみた2

Falconをローカル環境で動かせたので、今度はクラウドにアップしてみます。

AWSやGAE、Heroku等色々選択肢がありますが、検証も兼ねてCloud9を使ってみました。

 

Cloud9

https://c9.io/

 

Cloud9は開発環境+外部レポジトリとの連携、他のクラウドへのデプロイができるサービスなので、すぐに開発を始めたい場合などに利用できます。

今回はbitbucketと連携して使用してみます。

 

1.bitbucket & Cloud9へ登録

・bitbucket

Git and Mercurial code management for teams

・Cloud9

Cloud9 - Your development environment, in the cloud

 

bitbucketでレポジトリを作成して、前回作成したソースを追加(手順は省略)
Cloud9側はbitbucketのアカウントでログインすると良いです。

 

2.bitbucketとの連携

・Dashboadの[ACCOUNT SETTINGS]-[Show your SSH key]をコピーし、bitbucket側でアカウントの管理からSSHキーを追加します。
・ADD-ON SERVICESの[Bitbucket]をactivateにしておきます。

 

3.Workspaceの作成
[Create New Workspace]の[Clone From URL]を選択し、SourceURLに「git@bitbucket.org:レポジトリ名.git」を入力、Wokspaceのタイプは[custom]で[Create]ボタンをクリックします。

※SourceURLに入力するのはgit cloneする時に使用するURLです。

レポジトリのクローンが開始されるので[START EDITING]が表示されるまで待ちます。

 

4.アプリケーションの起動

[START EDITING]ボタンをクリックするとCloud9のIDEが立ち上がるので、

画面下部のTerminalにて作業を行います。

まずは必要なモジュールをインストールします。

$ sudo pip install --upgrade cython falcon gunicorn

今回は無償のプランなのでメモリなどが少なく警告が出る場合があります。

あとは通常通り起動します。

$ gunicorn hello:app

 

起動後にログにURLが表示されるので、それをクリックするとIDE内にブラウザが立ち上がります。

URLの所に「https://workspace名-ユーザー名.c9.io/」が入っているので/helloを付与すると確認ができます。

また、右上部の四角いボタンをクリックすると通常のブラウザページとしても表示されます。

※たまにうまくURLが入らないことがあるようですが、原因はわからないままでした。

何回かやっていると入るかも?

 

あとは、Cloud9上でソースを修正してpushしたり、逆にbitbucketに対して編集されたものをpullすることができます。

クラウド上に環境が集約されているのでとても便利ですね!

 

 

 

Falconを使ってみた

昨日はWindows版の環境構築が失敗したので、今日はOS Xにて環境構築を行いました。

$ pip install --upgrade cython falcon

 

はい、特に問題もなくインストールが出来ましたw

ついでにgunicornも入れておきます。

$ pip install gunicorn

 

以下のような内容のhello.pyを作成します。

import falcon

# Hello Worldを返すリソースクラス。
# REST APIとして、リソースを用意して登録する形で作成します。
class HelloResource:
    def on_get(self, req, resp):
        resp.status = falcon.HTTP_200
        resp.body = ('Hello World!')

app = falcon.API()

hello = HelloResource()

# falconのインスタンスにリソースを追加
app.add_route('/hello', hello)
     

以下のコードで起動します。

gunicorn hello:app

以下のコマンドでAPIから結果が取得できるか確認してみます。

curl localhost:8000/hello

Hello World!」と表示されれば成功です!

bottleのように簡単にAPIが作れるのは良いですね。

Webアプリケーションを作る時はbottle、WebAPIを作る時はfalconと住み分けも出来そう。

Falconを使ってみ(ようとし)た

今年に入ってから参加している勉強会で、WebAPIを作ろうということになったのでFalconを使ってみることにしました。

 

Falcon

Falcon - The minimalist Python WSGI framework

 

Falconは高速で動く小型のWSGIフレームワークで、BottleやFlaskよりも早いみたいです。

何より名前がカッコいいですね!

 

今回はWindows8、Python3.4+virtualenvの環境にインストールしてみます。

公式ページを見るといくつか方法があるのでpipでインストール!

$ pip install --upgrade cython falcon

 

おっと、何やら赤い文字が・・・

ログを見るとC++コンパイラが必要なようです。(cythonだから当たり前かw)

error: Microsoft Visual C++ 10.0 is required (Unable to find vcvarsall.bat).

 

そういえばVisualStudioをインストールしていなかったので、この際だから

無償版をインストールしてしまおう!

Free Dev Tools - Visual Studio Community 2013

 

・・・

はい、結論から言うと駄目でしたw

相変わらずvcvarsall.batが見つからないというので、このバッチファイルがあるディレクトリを環境変数に追加してみても反応なし。

色々と調べてみると、どうもpython3.4をコンパイルしたVisual C++ 2010を入れないと駄目な模様。

うーむ、最新版のPythonが古いVSに依存しているとは残念すぎる。。

 

解決策としては

MinGWを使う

・VSの古いバージョンを入れる(それでも動かない場合があるらしい)

ですが、簡単にvirtualenvに環境を作ることが出来なさそうなので、Windowsは諦めてOS Xに入れることにします。。

nginxとgunicornの設定

nginx+gunicorn環境において、

以下の様なエラーが発生した場合、設定ファイルの調整で解決できます。

・リクエストのBodyサイズが大きい:「413 “Request Entity Too Large” error with uploading a file」

・レスポンスが遅い:「upstream prematurely closed connection while reading response header from upstream」

 

・リクエストの最大Bodyサイズの設定

nginx.confのhttpセクションに以下の様な設定を追加する。

client_max_body_size 2M;

ファイルアップロード時などにぶつかる問題ですね。ファイルを圧縮するなど工夫することも考えたほうが良いかもしれません。

 

・レスポンスの待ち時間の設定

gunicorn.conf.pyの以下の値を増やす。

timeout 15

本来は遅くならない対策を取るべきですが、レスポンスが遅くても差し支えない場合などに。。 

 

何か良い方法がありましたら、是非教えて下さい!

 

※追記

nginxのプロキシのタイムアウトも設定する必要がありました!

こんな感じでhttpセクションに書いておくと良いです。

proxy_connect_timeout 160;
proxy_read_timeout    160;
proxy_send_timeout    160;

 

IntelliJ IDEを使ってみた2

3月~4月は忙しくて全然かけてない><

 

IntelliJでライブラリのデバッグをするためのソースの添付方法

・「File」→「Project Structure」→「Librares」の右側のリストにソースのzipを追加してあげる。

 

コード補完のショートカットについて

WindowsだとCtrl+Space、Macだと何文字か入力するとダイアログが出てくる。

メソッドのオーバーライドやらもこれでできるので便利!

 

IntelliJ IDEを使ってみた

久々にJavaを扱うことになったので、eclipseではなくIntelliJ IDEを使ってみました。

キーマップがeclipseの物も使えるので移行もしやすいですね。

知っておくと便利そうなのが、

・Command+O(KeyMapをEclipse Mac OS Xに設定した場合)でメソッド一覧のダイアログが開くので、そこから実装に飛べる。

・soutを入力するとSystem.out.print()に補完してくれる。

 

まだ使い始めだけど、動作も軽いので慣れればeclipseより良いかも?