[Rails][非同期処理]Resqueをはじめる その1 (Redisのインストール)

Railsの非同期処理 Resque 導入編(Redisの手動インストール)


ResqueとDelayedJobの違い


DelayedJobは MySQL等のRDBに非同期処理するためのデータを永続化します


Resqueは RedisというNoSQLにデータを永続化します
RedisはmemcachedのようなインメモリDBですが、データの永続化機能(メモリに乗り切らないデータをディスクに保存する(SSD推奨)、定期的にメモリ上のデータをディスクに保存するなど)をもっています
基本的に超高速に処理したい場合に利用する感じ
なお、データの安全性(ある程度はディスクキャッシュするけど(しないようにもできるけど))はクラスタ組まないと無理なので注意(その点DelayedJobはRDBMSなので安全。だけど遅い)


Rubygems.orgは以下より
Resque
DelayedJob


Redisをインストールする


Ubuntu 11系の場合でのインストール手順です


Redis お手軽導入版(aptitudeを利用する)


※aptitudeがない場合はsudo apt-get install aptitudeを実行してください


sudo aptitude install redis-server

2011/06/23時点でのバージョンは2.0.1の模様です


$ redis-server -v
Redis server version 2.0.1

Redis ちょっと面倒インストール版(2.2系とか使いたい人用)


手動なので/opt以下へインストール
/usr/localとかでもいいです


※aptitudeでのアンインストールの方法
ゴミが残ったら(/var/log/redis/以下にログファイルとか)警告が出るので手動で削除


sudo aptitude purge redis-server

Redisをダウンロード後makeする


今回は2.2.11を利用します。
最新バージョンはhttp://redis.io/downloadを参照してください


cd /opt/
sudo wget http://redis.googlecode.com/files/redis-2.2.11.tar.gz
sudo tar xzf redis-2.2.11.tar.gz
cd redis-2.2.11
sudo make

redisの起動用ディレクトリを作成する


バイナリファイルはシンボリックリンクでなくてcpコマンド等でも移してもOKです
シンボリックリンクのほうがバージョンアップが(多分)楽なだけ(やったことないので...)


sudo mkdir /opt/redis
sudo ln -s /opt/redis-2.2.11/src/redis-benchmark redis-benchmark
sudo ln -s /opt/redis-2.2.11/src/redis-cli redis-cli
sudo ln -s /opt/redis-2.2.11/src/redis-server redis-server
sudo ln -s /opt/redis-2.2.11/src/redis-check-aof redis-check-aof
sudo ln -s /opt/redis-2.2.11/src/redis-check-dump redis-check-dump

redisのconfファイルを作成します


めんどうなのでfc2にUp
デーモン起動用の設定ファイルです


cd /opt/redis
sudo wget -O redis.conf http://namakesugi.web.fc2.com/settings/redis_2.2.11.conf.txt

redisの起動スクリプトの設置


めんどうなんどfc2にUp(2回目)
/opt/redis以下へインストールした場合の起動スクリプトです
違う場所の場合は適当に変更してください


cd /tmp
sudo wget -O redis-server http://namakesugi.web.fc2.com/settings/redis-server.txt
sudo mv redis-server /etc/init.d/

起動用redisユーザの作成・権限設定


sudo useradd -M -r --home-dir /opt/redis redis
sudo chmod +x /etc/init.d/redis-server
sudo chown -R redis:redis /opt/redis
sudo touch /var/log/redis.log
sudo chown -R redis:redis /var/log/redis.log

redisの起動テスト


sudo /etc/init.d/redis-server start

以下のように表示されればOK


Starting redis-server: redis-server.

ログファイルを確認しておく


sudo less /var/log/redis.log

[15263] 23 Jun 23:37:33 # Deprecated configuration directive: "glueoutputbuf"
[15264] 23 Jun 23:37:33 * Server started, Redis version 2.2.11
[15264] 23 Jun 23:37:33 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
[15264] 23 Jun 23:37:33 * The server is now ready to accept connections on port 6379

WARNINGの部分が気になる場合は指示どおり以下のように実行しましょう


sudo vi /etc/sysctl.conf

末尾に以下を追加(すでにある場合で0が設定されている場合は1にする
2のほうが安全な気がするんだけどなー
※OOMkillerで検索するとわかるかも


vm.overcommit_memory=1

redis-cliを起動してデータストアができることを確認する


/opt/redis/redis-cli 
redis 127.0.0.1:6379> set foo bar
OK
redis 127.0.0.1:6379> get foo
"bar"
redis 127.0.0.1:6379> quit

redisを停止させる


sudo /etc/init.d/redis stop

redisの永続化データファイルができていることを確認する


ls -la /opt/redis
-rw-rw---- 1 redis redis 21 2011-06-23 23:39 dump.rdb
lrwxrwxrwx 1 redis redis 37 2011-06-23 23:14 redis-benchmark -> /opt/redis-2.2.11/src/redis-benchmark
lrwxrwxrwx 1 redis redis 37 2011-06-23 23:14 redis-check-aof -> /opt/redis-2.2.11/src/redis-check-aof
lrwxrwxrwx 1 redis redis 38 2011-06-23 23:14 redis-check-dump -> /opt/redis-2.2.11/src/redis-check-dump
lrwxrwxrwx 1 redis redis 31 2011-06-23 23:14 redis-cli -> /opt/redis-2.2.11/src/redis-cli
lrwxrwxrwx 1 redis redis 34 2011-06-23 23:14 redis-server -> /opt/redis-2.2.11/src/redis-server
-rw-r--r-- 1 redis redis 298 2011-06-23 23:16 redis.conf

これで一応動作するようになりました
あとはconfファイルを用途に合わせていじればOKです


redis.confをいじる


大抵のことはもともとあったredis.confに記述されてありますので、そちらを参考に
Ubuntuは開発マシンで、かつResque用なのでメモリ制限をいれておきます
compressするので、開発用であれば1mbで十分


sudo vi /opt/redis/redis.conf

maxmemory 1mb
maxmemory-policy volatile-ttl

ファイル書き込みはResque使うので、設定したままにしておく


参考


CentOS redis
起動スクリプト拝借したところ
redis.confとか
スポンサーサイト

[Ruby][携帯]Ruby1.9.2系で絵文字を扱う方法

Ruby1.9.2系で絵文字を扱う方法


UTF8絵文字 => 各キャリア変換, 各キャリア間の変換(Unicode => SJISかな?)をサポート


使うメソッド


String#encode


encodeに渡す引数


  1. UTF8-DoCoMo
  2. UTF8-KDDI
  3. UTF8-SoftBank
  4. SJIS-DoCoMo
  5. SJIS-KDDI
  6. ISO-2022-JP-KDDI

絵文字変換のサンプルコード


DoCoMo


Docomo Unicode => Docomo SJIS


"\u{E6EC}".encode("SJIS-DoCoMo")
=> "\x{F991}"

対象はU+E6EC(黒ハート)を利用
参考 : DoCoMo絵文字の変換表


KDDI


KDDI Unicode => KDDI SJIS


"\u{e595}".encode("SJIS-KDDI")
=> "\x{F7B2}"

KDDI Unicode => KDDI ISO-2022-JP


"\u{e595}".encode("ISO-2022-JP-KDDI")
=> "\e\x24\x42\x78\x34\e\x28\x42"

対象はU+E595(ハート)を利用
参考 : KDDI絵文字の変換表


SoftBank


SoftBank Unicode => SoftBank SJIS


\u{E022}".encode("SJIS-SoftBank")
=> "\x{F962}"

対象はU+E022(ハート)を利用
参考 : KDDI絵文字の変換表


Unicode Symbol


Unicode Symbol => DoCoMo Unicode


"\u{1F304}".encode("UTF8-DoCoMo")
=> "\uE63E"

Unicode Symbol => DoCoMo SJIS


"\u{1F304}".encode("SJIS-DoCoMo")
=> "\x{F89F}"

Unicode Symbol => KDDI Unicode


"\u{1F304}".encode("UTF8-KDDI")
=> "\uEAF4"

Unicode Symbol => KDDI SJIS


"\u{1F304}".encode("SJIS-KDDI")
=> "\x{F3C8}"

Unicode Symbol => KDDI ISO-2022-JP


"\u{1F304}".encode("ISO-2022-JP-KDDI")
=> "\e\x24\x42\x7A\x4A\e\x28\x42"

Unicode Symbol => Softbank Unicode


"\u{1F304}".encode("UTF8-SoftBank")
=> "\uE04D"

Unicode Symbol => Softbank SJIS


"\u{1F304}".encode("SJIS-SoftBank")
=> "\x{F98E}"

Unicode SymbolはSUNRISE OVER MOUNTAINSを利用
なお、Unicode Symbolと各携帯キャリアの絵文字のマッピングはこちらを元にしている模様


Unicode Symbolと各キャリアの絵文字のマッピング定義がない場合


対象 : U+1F6B9 (MENS SYMBOL)


"\u{1F6B9}".encode("UTF8-DoCoMo")
Encoding::UndefinedConversionError: U+1F6B9 from UTF-8 to UTF8-DoCoMo
"\u{1F6B9}".encode("UTF8-SoftBank")
=> "\uE138"
"\u{1F6B9}".encode("UTF8-KDDI")
Encoding::UndefinedConversionError: U+1F6B9 from UTF-8 to UTF8-KDDI

絵文字変換について


jpmobile ... 各キャリアごとに絵文字の相互変換をサポート
元データがどのキャリアから入力されたかの情報を保持


emoji4unicode ... Unicode Symbolをベースにし、それぞれにどの絵文字が対応するかを表した物
このままの実装だと元データがどのキャリアからの入力か不明となる
Rubyのcoreでの実装
完全な実装だとhttps://github.com/miyucy/e4u-encodeとかか?


文字コードは頭が痛くなるので適当判断
使うことになったらまだjpmobile使う


参考


http://redmine.ruby-lang.org/issues/2833
http://redmine.ruby-lang.org/issues/3036 ... これはよくわからない。。。

[Rails][IDE環境]Gedit + Gmateがお手軽すぎる[Ubuntu]

RailsのIDE環境 Gedit + Gmate使い方


Gedit + Gmateのインストール


UbuntuでRails環境構築 その1で紹介しましたが、再度掲載します


Ctrl + Alt + Tでターミナルを立ち上げて
以下のコマンドを実行します


sudo apt-add-repository ppa:ubuntu-on-rails/ppa
sudo apt-get update
sudo apt-get install gedit-gmate
sudo apt-get install gedit-plugins

これでGeditのプラグインのインストールは完了です
※sudoコマンドで求められるパスワードは現在ログインしているユーザーのパスワードです(初心者用)


Gedit + Gmateの設定


起動時はこんなんでRails開発できるのかよ!って感じですが、設定とプラグインを適切に行えば問題ないと思います


Geditの設定


メニューバーの[編集] => [設定]から行います
私の好みに設定ですので、任意で構いません


[表示]タブ
Gedit表示設定
※対応するカッコを強調表示する は後述するテーマによっては外したほうがいいです


[エディタ]タブ
自動インデントを有効にする
タブをスペースにするは任意


[フォントと色]
好みのテーマを選んでください
飛ばして後で好きに変更しても良いです


プラグインの設定と解説


最初にやること


[ファイル参照ペイン], [埋め込み式の端末]を有効にします
一度[設定]ダイアログを閉じます


メニューバーの[表示]から
[ステータスバー], [サイドペイン],[ボトムペイン]を有効にします
サイドペインとボトムペインを表示した状態
なんとなくIDEっぽくなりました
あとは便利なプラグインを有効にしていきます
説明を見ながら好きなプラグインを有効にするといいでしょう
おすすめというか使い方調べないとわからないものを以下で紹介します


Gedit Open File [必須]


ファイルブラウザで開いているディレクトリ配下からファイルを探し、かつ開いてくれるプラグインです


例)
適当なRailsアプリを開きファイルブラウザでそのアプリケーションのルートディレクトリへ移動しておきます
[Ctrl]+[Alt]+[o]をキーボードから入力します
109_3.png
[appli]と入力するとappliで始まるファイルが表示されていきます
任意のファイルでEnterキーを押すとそのファイルを開くことができます


コード補完系


TextMate Style Autocompletion, Word Completion, Smart Indent, コードスニペット
1. Word Completionで補完候補が表示されるようになります
※補完候補から選択したくないときはShiftやAltなどを押下
2. TextMate Style AutocompletionでEscキーで補完候補のスイッチができます
(Word Completionがでなくなったときでもこちらは有効)
3. Smart Indent はインデントを自動で揃えます
※若干うざいときあり
4. コードスニペット
デフォルトで数多く用意されています(設定(ツール=>manage snippets)で確認できるかと思います)
※Railsのスニペットはbefore_filterであればbf + tabで出てきます
つまりそれぞれの単語の頭文字+tabでOKです(例外あり*defなど)


TextTools


メニューバー[編集]=>[TextTools]に記載されています
私がよく使うショートカットは以下の3つです
1. ALT + 上(下)矢印でカーソルがある行、範囲選択されている行を移動します
2. Shift + Ctrl + d => その行を下に複製します
3. Shift + Alt + w => abc_xyzのような_区切りの単語を選択したい時に使います
(マウスダブルクリックだとabcの部分だけしか選択できないので)
Ctrl + Alt + 9とかもあるみたいだけど使いこなせない
(シングルクォートの内部とかを一気に選択するときに使えるっぽいけど、普通にマウスとかでやってしまう)


Gemini


カッコやダブルクウォーテーションなどの閉じを自動的に挿入します
※[カッコの補完]と両方有効にすると大変なことになりますので、どちらかにしましょう


Regex Search Replace


正規表現を用いてファイル内の検索・置換ができます
Ctrl + Alt + H または[ツール]から起動できます


コードのコメント


Ctrl + Mでコメントアウト, Ctrl + Shift + Mでコメントアウトの解除ができます


Zen Coding


Ctrl + E または Ctrl + Alt + Eをよく使います
Zen Codingの画面を出しながら、Zen Codingしています
※初めての人はCtrl + Alt + E押下後に以下のコードをいれてみてください
※先に以下のコードをいれたあとにCtrl + EでもOKです


ol>li>a*5>span.hoge

Multi-edit


Ctrl + R またはCtrl + マウス左クリックで複数箇所に同時にカーソルをだして、同時に入力できます
※試したほうが早いかも


TabSwitch


ファイルのタブ切り替えをCtrl + Tabでできるようにする


所感


知らなかったショートカットもあったりしてお勉強になった
まぁ使うのって[Ctrl + Alt + O], [Ctrl + Tab], [Alt + 矢印キー]と自動的に実行されるプラグインぐらいなもんだったりする
標準のショートカットで知らなかった[Ctrl + Shift + Delキー](カーソルがある位置から後ろを削除)と[Ctrl + Shift + Z](進む)は知らなかったので使うと思う
もとに戻すを戻す方法知らなくて困ってたんだよね。。。ずっとツールバー使ってた
キーバインドシートつくっとこうと思いました



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。