SymfowareSymfowareSymfowareについての考察blogelixirからepgsqlを使用して、PostgreSQLに接続するelixirからPostgreSQLに接続しています。1.0.5こんな環境です。postgrex最初、postgrexというライブラリを使おうと思ったのですが、https://github.com/ericmj/postgrexどうしてもエラーが消せず、諦めました。:proc_lib.init_p_do_apply/3epgsqlhttps://github.com/epgsql/epgsqlErlang用のドライバーですが、elixirからも使用できます。FreeBSDだと、パッケージが用意されていました。installでインストールしています。erlang-epgsqlサンプルサンプルはこんな感じになりました。変換してから指定するのがポイントです。cowboyで、バイナリファイルをアップロードする機能を実装してみます。imageとして、新しくアプリケーションを作成しました。ソースはこんな感じです。endendテスト用のプログラムはPythonで作成しました。main()サーバーを起動。mixPythonのスクリプトを実行すると、画像がサーバー側に保存されるはずです。sample.pyok8MBを超えるファイル容量の大きいファイルをアップロードしようとすると、こんなエラーになります。:cowboy_protocol.execute/4調べてみると、POSTの上限は8MBの模様。こちらを参考に、上限を変更します。endendこれで、大きな容量のファイルもアップロードできるようになりました。画像のファイル名をリクエストヘッダーに含めてみます。こちらを参考にしました。main()これで、ちゃんとヘッダーに仕込んだファイル名で保存してくれました。最終的なサンプルをこちらに置いておきます。cowboyでapiサーバーを作ってみました。住所検索APIサンプルこれ、実運用するときどうするんだろう。mixって起動するわけじゃ・・・ということで、デプロイの方法について調べてみます。exrmデプロイはこちらを参考にしました。(exrm)を使えとのこと。10.1には、pkgが用意されているようです。exrmelixir-exrm-0.18.5これをインストールして使用することにしました。1.7.2_1結構、色んな物に依存してますね。help」を実行してみます。release」が追加されているはずです。pluginsリリースビルドビルドすると、必要なライブラリが一つのフォルダにまとめられ、そのライブラリを使用して起動するようになります。そのため、mix.exsのapplicationsに依存しているライブラリを列挙しておきます。releaseを実行。console`relディレクトリが作成され、必要なライブラリがまとめられました。コンソールモードで起動してみます。rel/[アプリケーション名]/bin/[アプリケーション名]例えば「rel/my_app/bin/my_app」に実行可能なバイナリが配置されています。consoleオプション付きで起動してみます。help)iex(cowjson@127.0.0.1)1>起動してくれました。cからabortでシュル用できます。コンソール無しで起動するにはstartオプションを指定。startこれでバックグラウンドで実行してくれます。停止は、stopオプションを付けて実行。実際にサーバーへ適用するときは、releasesの中に全資産のアーカイブが作成されています。適用を行うことになるようです。起動スクリプトやnginxとの連携はまた後日。住所検索APIサンプル色々材料が揃ってきました。結果をjsonで返却するサンプルを書いてみます。ソースコードプログラムは、ここで作ったものを修正します。API修正対象は、lib/cowjsonHandler.exです。endendテスト用のプログラムはPythonで作成しました。main()実行してみると、ちゃんと住所の応答があります。毎回データベースに接続している点でしょうか。動くサンプルということで。cowboyでGETやPOSTデータを取得する方法を調べてみました。GET,POSTパラメーターjson形式のデータを受け取り、応答してくれるAPIを書いてみます。exjsxjson形式へのエンコードはexjsxを使うことにしました。cowjsonmix.exsはこんな感じです。※環境によっては、depsにcowboyやexjsxが必要だと思います。endendAPI本体です。受け取ったデータをそのまま返しています。endendコンバイル&起動を行います。mixクライアントサンプルテスト用のクライアントサンプルはPythonで記載しました。main()実行してみると、狙い通りの応答が得られています。sample.py{"req_address":"symfoware@example.com","req_name":"symfo"}symfosymfoware@example.comソースはこちらに。APIのサンプル※Bitbucket、いつの間にかスニペットが使えるようになってました。次のページプロフィールAuthor:symfoblog形式だと探しにくいので、まとめサイト作成中です。