やること 複数のデータベースに接続して、各DBからデータを取得できるか確認してみます。 Phoenixで2つのDB(今回は同一ホストの別データベース)からデータを取得する レスポンスはJSONフォーマットにする 前提 Phoenix の実行環境がそろっている MySQL がインストールされている アプリケーション名はとりあえず multi としておく レポジトリを定義する Repoはアプリケーション作成時に一緒に生成されますが、2つ目は自分で定義します。
![[Elixir] Phoenixで複数のDBに接続する - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/a7c8e035f72aeb434a6cf7069e4deb83939a5397/height=288;version=1;width=512/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fqiita-fb-fe28c64039d925349e620ba55091e078.png)
Phoenix の開発者である Chris McCord さんが 2015/11/18 に書いた記事「Phoenix is not Rails」の翻訳です。 僕は Rails 未経験の状態で Phoenix を始めたクチなのですが、最近 Rails もやるようになり、両者を比較して考えることが多くなってきたので、いい機会だと思い翻訳してみました。 誤訳があれば編集リクエストを頂けると幸いです。 まえがき 昨年12月、ブライアン1は年次総括で 開発を Elixir と Phoenix に移行する計画を公表しました。それから1年、実際に Rails から Phoenix へ移行してみて分かったのは、この作業はそれほど大変ではないということです。というのも、Phoenix は Rails と非常によく似た作りをしているからです。もちろん、フレームワークのきちんとした理解にはそれなりの学習が必要で
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Elixir から Rust の関数を呼ぶことで、円周率 $\pi$ の近似値を求める計算を高速化する。Erlang VM の NIF(Native Implemented Functions)という仕組みで実現するので、同じ方法で Erlang から Rust の関数を呼ぶこともできる。 Qiita では同じようなタイトルの記事が 各言語でシリーズ化(?) されているので、それに便乗させてもらった。ただそれらでは、重い処理として再帰型のフィボナッチ数列関数が使われているのだが、それだとマルチコアプロセッサで並行計算(parallel
サービス運用に必要なサーバログの設定概要の一例。 ログの出力対象を考える ここでは下記を対象とする。サービスの初期段階ではログを多めに出しておいて、安定稼働の実績が出来次第ログを減らす方針でいく。 受信したHTTP Request リクエストheader(user-agent, x-forwarded-for) リクエストbody(controllerの引数のみ) 返答したHTTPレスポンス レスポンスタイム レスポンスbody(JSONの場合) vmの情報(process数) サーバ内での予期しない例外 各ログ出力には、下記の情報を付加させる ユーザーID そのログ出力が、どのユーザーのHTTPリクエストによって発生したのかがわかるようにする リクエストID そのログ出力が、どのHTTPリクエストによって発生したのかがわかるようにする 各ログ出力を設定する リクエストheader(use
現在、Ectoではcallbackマクロはなくなったとのことです。 そのため、マクロの一例としてご覧ください。 Goal マクロの応用パターンを習得する。 Dev-Environment OS: Windows8.1 Erlang: Eshell V6.4, OTP-Version 17.5 Elixir: v1.0.5 Wait a minute マクロで作成されているソースコードでよく見る形をまとめます。 最初にTipsをやります。 内容的に目的が二つ以上になってしまうので、あまり良くはないのですが、 覚えておいた方が進行がスムーズになるので、一緒にやってしまいます。 そんなの知ってるよ!って方は、読み飛ばして下さい。 Index Implement a callback macro |> Map.update/4 |> Kernel.function_exported?/3 & Ke
Elixirでプロセス20万位作ってみた Elixirの下のErlang VMは軽量プロセスという仕組みを使って、並列プログラミングをサポートしている。ErlangのプロセスはOSのプロセスとは異なり、VM内でプロセスを切り替えている。 erlangやElixirではプロセスの使用を勧められる。 実際、どのくらいのプロセスが生成出来るか調べてみた。 process limitの引き上げ 20万プロセスまで生成出来た。それ以上はデフォルトのprocess limit に引っかかって起動出来なかった。erl +P 1000000 でprocess limit をあげられるそうだが、erlang r18からそのオプションは無効化されたそうで、何を指定すれば、process limitの上限をあげられるかわからなかった。 追記: erlang r18で+P オプションは無効化されてないそうです。
Elixirで、表題の通り5000万プロセスぐらい作ってみた。 Elixirで20万プロセスを作ったその後 Elixirはerlang VMをベースとした関数型の言語だ。Rubyっぽい文法も使えて便利である。erlangの特徴である、軽量のプロセスが使えるのが一つの売りである。 少し前に、Elixirでプロセス20万位作ってみた という投稿を行った。その時は、デフォルトのprocess_limitのサイズ約26万を超えて、プロセスを指定する方法がわからなかった。親切な方から、26万を超えるprocess_limitの指定方法を教えてもらったので、それならどれくらいまで行けるかと思い、5000万までプロセスを作ってみた。プロセスの単位がインフレしすぎて、実際何の単位なのかわからなくなった。 erlangのプロセス この場合のプロセスは、erlangで使われる軽量プロセスのことだ。プロセスはe
ゴール エディタ内でテスト実行、結果表示を完結(画像右側)。 失敗ケースの宣言行にマーク(画像左側)。 マウスオーバーによるメッセージの表示。 できていないこと アサーションに失敗した行番号の情報取得、紐付け。 不具合? たまにテスト実行が行われず、マークだけ消えることがある。 Outputを見れば一目瞭然なので気付くことはできる。 想定 Visual Studio CodeとExUnitの基本的な使い方を知っており、セットアップ済み。 エディタ内で完結する形で、ExUnitとの連携を試してみたい人向け。 所要時間3~5分。 書いた人の環境 Windows 10 Visual Studio Code 0.10.6 Elixir 1.1.0 Web Installerでセットアップ。 前提 プロジェクトのルートディレクトリで $ mix test が正しく実行できる。 $ mix new で
Elixir プログラムの再帰呼出しが、末尾呼び出し最適化されてるか確認するために、beam ファイルに格納されたマシン語からアセンブリ言語へ逆アセンブルする方法を調べてみた。 おまけとして、beam から Erlang のソースコードへ逆コンパイルする方法も紹介する。 beam ファイル Elixir や Erlang のプログラムをコンパイルすると、モジュールごとに beam ファイルができる。このファイルには、Erlang VM のマシン語に変換されたプログラムや、オプションでデバッグ情報が入っている。 今回調べてわかったのだが、Erlang の標準ライブラリーに用意された関数を使うと、このマシン語を逆アセンブルできる。また、デバッグ情報付きでコンパイルされている場合は、Erlang コードに逆コンパイルすることも可能だ。 末尾呼び出し最適化されているか確認したい Elixir や
この文章はPinterestのエンジニアSteve Cohenさんの2015年12月18日付のブログ記事Introducing new open-source tools for the Elixir communityの翻訳です。 Erlangの作者Joe Armstrongが素晴らしいと褒めていた記事で、PiterestでどのようにElixirが使われているかが分かりました。 高尚な文章なので訳すのに少し苦労しました。誤訳や関連記事などがあればコメント欄にお願いいたします。 80年代は憂鬱で深刻な年代とは典型的に記憶されていない。大衆はワン・チャンの"Everybody have fun tonight"を聴き、デロリアンでできたタイムマシンを夢見ている頃、スウェーデンの電話会社に勤める数人の技術者たちは偶然にも未来を創造した。彼らは遠距離通信の問題の解決をしていた。しかし奇妙な偶然に
この文章はFabio Akitaさんの2015年11月25日付のブログ記事ExMessenger Exercise: Understanding Nodes in Elixirの翻訳です。 Fabio Akitaさんはブラジル在住で、ブログの名前からも分かる通り熱狂的なRubyistです。Ruby/Railsの世界ではかなり知られた方のようですが、最近はElixirにハマっているようです。 Elixirの作者のJose ValimがRailsのコミッタであったこととPhoenixというRails風味のWebフレームワークがあることもあってか、RubyistがElixirを使い始めるケースが増えてきているように思います。 Elixirはノード間で通信するための便利な機能を提供していて、この記事はそのチュートリアルです。 翻訳をすると流し読みをしがちなところを、精読する必要があるので、自分自身
Elixir Advent Calendar 2014 22日目。 私の前回の記事は gen_event に関するものでした。 せっかくなので、OTP全般について、「Elixirの場合はどう書くのか」「ElixirはErlangとどう違うのか」といった観点で見ていきましょう。 gen_server gen_server については、 @k1compolete さんが2年以上前に作られた資料が、とても端的にまとめられています。 http://s.testerhome.com/k1complete/development-appwithelixir gen_server には、Elixirならではの違いは特に見られません。 どちらかと言うと、書き方の違いや、その言語自体の処理系の実装の違いとなるでしょう。 (Erlang/OTPでは「振る舞い」として指定するのに対し、Elixirでは継承を使う
はじめに この記事はElixir Advent Calendar 2015の23日目の記事です。 Timexとは Elixirで時間や日付を扱う場合、よく使われるのがTimexです。それなりのサービスやアプリを作る際には、大抵時間や日付の処理が必要になってきますので、利用頻度の高いライブラリだと思います。 Timexを使ってみてヒヤリ・ハットな挙動がいくつかあったので、その紹介をします。 ケース1: タイムゾーンの取得 Timexでタイムゾーンの情報を取得するにはDate.localを使います。 iex(1)> use Timex nil iex(2)> Date.local %Timex.DateTime{calendar: :gregorian, day: 23, hour: 20, minute: 45, month: 12, ms: 755, second: 49, timezon
パラメータを%{"name" => name}のようの文字列のキーを使うのが一般的なようなのですが、 他の処理ではAtomとか使っているのだけど、ここだけなんでなんだろう? Programming Phoenixの中のコラムAtom keys vs. string keys?では以下のように書いてあります。 In the world action in our controllers, the external parameters have string keys, "name" => name, while internally we use name: name. That’s a convention followed throughout Phoenix. External data is unsafe, so we explicitly match on the string
(Elixir 向けの内容ですが、Erlang で書かれた recon_trace を紹介しているので、Erlang タグも付けてます) トレース機能、使ってますか? みなさんは Elixir のプログラムをどのようにデバッグしてますか? IEx.pry? それとも、IO.inspect を使った、いわゆる printf デバッグでしょうか? また、もし本番環境で次のような問題が起こったら、どう調査しますか? 特定の条件(ユーザーからの入力)でエラーになるようだが、その条件自体がわからない どこかが性能上のボトルネックになっているようだ ログを追加して、アプリケーションをデプロイし直すのもひとつの方法ですよね。 もちろん、どれも有効な手段です。でも、こんな時、まずは Erlang VM のトレース機能を使うことをお勧めします。それだけで原因がわかるかもしれません。 「すごいE本1」の原著者
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く