読者です 読者をやめる 読者になる 読者になる

備忘録、はじめました。

作業したこと忘れないようにメモっておきます。Medium: https://medium.com/@tkyshm

Riak searchを使ってみた

riak

はじめに

Riakで全文検索してみたいと思い、Riakのsearch機能を利用する準備で行った作業をまとめました。

利用環境

  • Ubuntu server 14.04
  • Riakのホストは192.168.56.101
  • Riak 2.0.5(from source)

前準備

作業

indexの作成

例として、"api_index"という名前のindexを作成します。

export RIAK_HOST="http://192.168.56.101:8098"
curl -XPUT $RIAK_HOST/search/index/api_index \
     -H 'Content-Type: application/json' \
     -d '{"schema":"_yz_default"}'

下記、URLにアクセスし、api_indexのsolrのcore(?)が作成されているか確認します。 ※ solrについて詳しくないので上記言い回し的に間違ってたらご指摘ください。

http://192.168.56.101:8093/internal_solr/

続きを読む

Cowboyでobserverを起動するメモ

erlang cowboy

目的

軽量HTTPサーバcowboyのアプリケーションをErlangの監視ツールobserverで視覚的に監視できるようにしたい。

実施内容

  • relx.configの編集

レシピ

relx.configの作成したアプリケーション名(以下app_name)の他に、

  • wx
  • observer
  • runtime_tools

の3つを追加します。

{release, {animeeting_release, "1"}, [app_name,wx,observer,runtime_tools]}.
--省略--

上記の対処でobserverが起動できるようになります。 アプリをconsoleで起動し、下記コマンドをerlシェルで実行します。

1> observer:start().

下図みたいな感じなものが見れるようになります。

続きを読む

Riak 2.1.0をソースからインストール&クラスターの構築

riak

はじめに

※ 2.0.4から2.1.0に更新しました。

以下、準備するものになります。

1ノードのスペックは以下になります。
* MEM: 1024 MB

  • CPUs: 1 core

  • HDD: 10 GB

  • NIC: 2枚 (ひとつはNATで、もうひとつはホストオンリーアダプタ)

ネットワークの設定

まずはじめに、/etc/network/interfacesのファイルを修正します。

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

# The secondary network interface
auto eth1
iface eth1 inet static
address 192.168.56.xxx
network 192.168.56.0
netmask 255.255.255.0
broadcast 192.168.56.255
gateway 192.168.56.1

addressのIPはRiakの各ノードのIPアドレスが当てはまります。設計したIPを入れます。 ※ eth0はNAT接続で、eth1はホストオンリーアダプタ

networkingをリスタートします。

続きを読む

GitLab7.6.2の検索フォームでUTF-8の文字列を使う場合

gitlab

問題

検索フォームでUTF-8のも文字列を使って検索してしまうと次のようなエラーが出てきます。

Encoding::CompatibilityError (incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string)):
  app/models/repository.rb:162:in `method_missing'
  lib/gitlab/project_search_results.rb:51:in `blobs'
  lib/gitlab/project_search_results.rb:20:in `objects'
  app/controllers/search_controller.rb:33:in `show'

ASCII-8BITの文字列に対してUTF-8の文字列で比較してしまっていると怒られています。
(gitのwiki作成に用いられているgollum-libは、ASCII-8BITの文字列を扱っているらしいので)

解決策

app/controllers/search_controller.rbの変数termの行を変更しました。

  def autocomplete
    # term = params[:term]
    term = params[:term].force_encoding('ASCII-8BIT') # ここの行を変更
    @project = Project.find(params[:project_id]) if params[:project_id].present?
    @ref = params[:project_ref] if params[:project_ref].present?

    render json: search_autocomplete_opts(term).to_json
  end

params[:term]は検索フォームに入力された文字列なので、そのparams[:term]をforce_encodingでASCII-8BITにエンコーディングしてあげることで、UTF-8の文字列を入力した際にも強制的にASCII-8BITに変換して検索にかけることができるようになります。

Ubuntuでriakをインストールするときにやったこと(まとめ)

erlang riak

はじめに

riakをインストールしようとした時に、コンパイルでこけたり、実行時にWarningを喰らったりしたので、その問題を解決するために必要なことをまとめました。まず、はじめに今回やったことを箇条書きにします。

  • apt-get install libpam0g-dev を実行した
  • ulimit -n 65536を実行できるようにした

また、インストール手順は本家のRiakのFive-Minute Installを参照しています。

libpam0g-dev

PAM認証のモジュール、APIのライブラリが詰まったもので、riakでは使ってるらしい。インストールしておかないとmakeがとおりませんでした。

ulimitってなーに?

ユーザがコマンドで使えるリソースを制限するものらしいです。
一時的に反映させる場合は、

ulimit -n 65536

と実行してあげると反映されます。
今回、このコマンドが上手く行かず、ulimit: value exceeds hard limitと言われたので他に別の設定が必要だったお話になります。

やることは、etc/security/limits.confにユーザーごとのhard制限を明記してあげることになります。

追加した行:

username hard nofile 65536
username soft nofile 65536

次に、/etc/pam.d/common-sessionに以下の行を追加しました。

session requrired pam_limits.so

再起動すると設定が反映されます。再起動後、riakを実行します。

riak start

もし、エラーが出たりして起動できない場合は何回もstartしてみてください。
何故か失敗するときと成功する時がありました。

Dockerのコンテナに任意のIPアドレスを割り当てる方法

docker

はじめに

Dockerのコンテナは起動すると次の2つが自動で行われます。

2つ目のIPアドレスの割当ては昇順に自動で引っ張ってきます。
しかし、手動でIPアドレスを割り当てたいケースがあります。
今回、2つ目のIPアドレスの割当てを手動で行う方法の1つを説明します。

続きを読む

webmachineとAJAX

webmachine erlang

はじめに

 2014年5月30日現在、アプリケーションの開発で、バックエンドにwebmachine、フロントエンドにAngularJSを選択しようと考えています。その2つのやりとりでCORSの問題が起きるので、回避方法をメモします。主にやることは、webmachine側のAccess-Control-Allow-OriginのHeaderの追加と、許可するContent-typeなどの設定になります。

続きを読む