ホーム ブログ ページ 65

Rak(grepの検索結果を見やすくする方法)

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

ターミナルを用いている時は、検索にgrepをよく使うと思います。

その中で、私はgrepでは検索結果が見づらいと感じた事があります。

そんな時に見つけたのが、今回紹介するgrepの検索結果を見やすくする便利なRubyプラグイン(Rak)です。

RubyGemからRakプラグインをインストールするgem install rak

 これだけでRakを私用する事ができます。

使用例rak 検索文字列

結果は以下(rak def の場合)のようになります。 

rak の便利な使い方

rubyファイルのみ検索 

rak 検索文字列 –ruby

rubyファイル以外の検索

rak 検索文字列 –noruby

2つ以上のキーワード検索はパイプラインを用いれば良い

rak 検索文字列 | rak 検索文字列 

 ヘルプ

rak -h

ruby on railsのActionControllerにモジュールでbefore_filterを実装する方法

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

railsのコントローラーにmoduleをinlcudeする時、

moduleにbefore_filterを書いても、AplicationControllerを

継承していないのでエラーが出ます。

moduleで共通化してるわけですから、before_filterもmodule側で

済ませちゃいたいですよね。

 というわけでやり方です。

コントローラと違って、モジュールはActionControllerを継承してないことが

原因でエラーが出ているので、コントローラー側で定義してしまえばエラーが

出ません。

じゃあ、インクルード後に、インクルードしたコントローラ自身に定義する様

書いてあげましょう。

module NantokaModule
def self.included(base)
base.class_eval{
before_filter :filter_name
}
end
end
self.includedというメソッドは、moduleをincludeした時に呼び出されるメソッドです。
で、baseは、呼び出した側のクラスが入ってきますので、そちらに対して、class_evalを
実行します。
そうすると、クラスにbefore_filter~~が宣言されることになります。 

ruby on railsのActionControllerにモジュールでbefore_filterを実装する方法

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

railsのコントローラーにmoduleをinlcudeする時、

moduleにbefore_filterを書いても、AplicationControllerを

継承していないのでエラーが出ます。

moduleで共通化してるわけですから、before_filterもmodule側で

済ませちゃいたいですよね。

 というわけでやり方です。

コントローラと違って、モジュールはActionControllerを継承してないことが

原因でエラーが出ているので、コントローラー側で定義してしまえばエラーが

出ません。

じゃあ、インクルード後に、インクルードしたコントローラ自身に定義する様

書いてあげましょう。

module NantokaModule
def self.included(base)
base.class_eval{
before_filter :filter_name
}
end
end
self.includedというメソッドは、moduleをincludeした時に呼び出されるメソッドです。
で、baseは、呼び出した側のクラスが入ってきますので、そちらに対して、class_evalを
実行します。
そうすると、クラスにbefore_filter~~が宣言されることになります。 

カーネルの再構築

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

以前、誰かが「Linux2.6系の脆弱性でroot権限奪ってみた」
という記事を書いていましたが、最近CentOSをインストール
したところ、見事にこの脆弱性に引っかかったので、カーネル
を再構築するハメになりました。

というわけで、以下、カーネルの再構築について簡単に
手順を記したいと思います。

作業環境

OS:CentOS5
現行カーネルバージョン:2.6.18-8.el5

カーネルの再構築

1.以下のサイトからカーネルの最新ソースファイルを取得# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.tar.bz2

2.root権限で/usr/srcへ移動。# su –
# cd /usr/src

3.1のファイルを展開し、シンボリックリンクを作成# tar jxvf linux-2.6.26.tar.bz2
# ln -s linux-2.6.26 linux
# ln -s linux-2.6.26 linux-2.6

4.configファイルをコピー# cp /usr/src/kernels/2.6.18-8.e15-x86_64/.config /usr/src/linux/.config

5.configファイルを更新する# cd linux
# make oldconfig

※ ここから先は対話形式で進む。デフォルト設定でよければ[Enter]で先へ進もう。
y = カーネルに静的に組み込まれる。
m = カーネルモジュールとして組み込まれる。(使用時のみ動作する)
n = 設定を無効化。
? = ヘルプを参照。

6.余計なファイルの削除# make clean

7.Kernel を構築します# make bzImage

8.モジュールのコンパイル# make modules

9.モジュールのインストール# make modules_install

10.全体のインストール# make install

11.動作確認
サーバ起動時に、方向キー上下でKernelを選択することが出来るので、
最新カーネルを選択し、問題がないかを確認する。
(失敗の場合は各種デバイスが認識されなかったりする)

ブートローダの設定

デフォルトで最新カーネルで起動するように設定。# vi /etc/grub.conf

「title CentOS (******)」がカーネルの情報で、
上から順に0,1…となる。
最新のカーネルは0(一番上)になっているので、
defaultの設定を0に変更すれば、最新バージョンで
起動する。default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.26)
          root (hd0,0)
          kernel /vmlinuz-2.6.26 ro root=LABEL=/
          initrd /initrd-2.6.26.img
title CentOS (2.6.18-8.el5)
          root (hd0,0)
          kernel /vmlinuz-2.6.18-8.el5 ro root=LABEL=/
          initrd /initrd-2.6.18-8.el5.img

postfixのaliasでメールを転送してみよう。

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。タジです。

今回はpostfixのaliasについてです。

エイリアスとは別名という意味で、登録しておくことによりファイルなどの実体を別の名前で参照することができます。
つまり、二つの別のアドレスを同じように扱うことができるわけですね。

主な使い方は転送の設定やメールボックスの共有などが一般的です。

 ここではpostfixのpostmasterのメールを自分の元に転送する場合を例にエイリアスの設定を紹介します。


まず、/etc/aliasesを編集してrootのaliasとして受信したいユーザを登録します。

以下のように追記しましょう。

root:       Taji


登録するのはユーザアカウントだけでなくメールアドレスでも可能です。

root:        Taji@kbmj.com


アカウントの複数登録も可能で、簡易なメーリングリストのようにも使うことができます。「,」を使って並べたアカウント名を区切ります。

root:        m-list

m-list:         red,brue,green,black(アカウント名)


エイリアスを変更した場合、その情報をデータベースに反映させなければなりません。
これはpostfixが設定を高速に読み込むために、直接読まずにデータベースから直接読もうとするためです。

作業は簡単で、以下のコマンドを入力するだけです。

newaliases

このコマンドでデータベースを初期化して設定を反映します。
ここまで設定したら一度postfixをリスタートします。

/etc/init.d/postfix restart

これでaliasの設定は終了です。簡単ですね。

 では転送の設定もしてしまいましょう。

エイリアスでpostfixのメールを転送したい場合、ユーザごとに転送の設定をする必要があります。


方法は簡単で、homeの直下(cdとだけ打てばホームに移動する)に.forwardを作成します。

su – Taji

cd

vim .forward


.forwardの中身は転送先のアドレスを書くだけです。

Taji@kbmj.com


転送元にメールを残しておきたい場合は¥[アカウント名]という記述を追加します。
Tajiというアカウントに残しておくなら・・・

¥[Taji] Taji@kbmj.com

と書きます。

これで転送の設定も終了です。

root宛てのメールが自分のメールボックスに届いていたら成功です。

それではまた次回。 

splitで文字列を分割してみよう。

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。タジです。

今回は正規表現を使って文字列を分割するメソッド、splitの使い方です。

splitはString型のメソッドで、文字列を正規表現にマッチングする部分ごとに分割して、配列に格納して返します。 

 正規表現とは指定した文字列と合う部分を検索したり抜き出したりするのに使われる表現です。

実際は以下のような感じで使います。

 p “a,b,c,d,e”.split(/,/)

出力結果

条件の正規表現は「/」 で囲います。 

さらに、第2引数には回数を指定できます。

p “a,b,c,d,e”.split(/,/ , 2)

出力結果

=> [“a” , “b”,”c,d,e”]

 私はCSVファイルをDBに格納するのに使いました。

splitはこの他にも使い方があるそうなので、色々勉強していきたいと思います。

では、また次回。 

ウォームスタンバイの復旧手順

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

どうもメガネです。6回目です。

前回紹介した設定ではdb1で障害が発生した場合db2でリカバリが行われることが確認できましたが、
このままだとdb2にも障害が起きるかもしれません。そこで今度はdb1を待機系としてウォームスタンバイを復旧する設定をします。

今回は前回の設定が終わっていることを前提で行います。

さきほどまで主系だったdb1のデータベースインスタンスはもう不要なので削除します。

$ rm -rf db1

archive1の中も削除したいですがシンボリックリンクが残っている可能性があるので残しておいてください。

$ psql -p5433 -c “select pg_start_backuo(‘backuo2’) template1
pg_start_backup
——————
  0/9000020
  (1 row)

$ cp -Rp db2 db1
$ psql -p5433 -c “select pg_stot_backuo() template1
pg_stop_backup
——————
  0/A00000000
  (1 row)

次に設定ファイルを編集します。
db1/recovery.confとdb1/postgresql.confの設定を行います。
以下のように変更してください。

db1/recovery.conf
 restore_command = ‘pg_standby -l -t /tmp/trigger /tmp/archive2 %f %p %r’

db1/postgresql.conf
 archive_command = ‘cp %p /tmp/archive1/%f’
 #port = 5433

また前回のように完全バックアップのディレクトリの中からpostmaster.pidとpg_xlogの中身を削除します。

$ rm db1/postmaster.pid
$ rm db1/pg_xlog/*
rm: db1/pg_xlog/archive_status: is a directory
$ rm db1/pg_xlog/archive_status/*

$ pg_ctl -D /tmp/db1 start


以上で設定は終了です。

RDBMSでトランザクション処理をしてみよう。

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

 こんにちは。タジです。

 今回は postgresqlやMySQLなどのRDBMSでのトランザクション処理についてです。

 重要なデータの入ったデータベースでUPDATEやDELETEを実行し、もし間違えてしまったら。想像するだけでも恐ろしいです。

 そんな時、トランザクション処理をしておけば、万が一失敗しても元の状態に戻すことができます。

 トランザクション処理では、実際にSQLを発行する前にBEGIN;で処理を開始します。

 その後、UPDATEやINSERT、DELETEなど実際の作業を行い、問題なく作業が終了した場合はCOMMIT;で処理を終了し、データベースに作業を反映させます。

 間違ったSQL文を発行してしまったり、必要な部分を消してしまった時などはROLLBACK;でBEGIN;の時点にデータベースを復旧することができます。

 データベースを触るときは是非やってみてください。

では、また次回。 

nfkで文字コードを変換してみよう。

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。タジです。

 今回は、nkfライブラリで文字コードを変換する方法です。

nkfライブラリはnkfコマンドと同じ機能を持っており、rubyに標準で添付されているライブラリです。JIS、EUC-JP、Shift-JIS、UTF-8をかなり簡単に変換できます。

 使い方も簡単です。

 以下はShift-JISで書かれたテキストである「data.txt」を、UTF-8に変換する場合です。

 require ‘nkf’

 File.open(data.txt) do | f |
   text = NKF.nkf(  “-Sw” , f )

     p text 

 end 

 簡単に解説します。

 まずライブラリを読み込む時のお約束であるrequireでnkfライブラリを読み込みます。

 続いて変換したいtextファイルである「data.txt」を読み込みます。

あとは変換した内容を表示するだけですね。

  肝心のNKFライブラリを使っている部分は、()内の引数に変換前の文字コードと変換後の文字コードを指定しています。 

 -jがJIS、-eがEUC-JP、-sがSHIFT-JIS、-wがUTF-8を表しており、変換前が大文字、変換後が小文字という形で指定します。

 今回はSHIFT-JISからUTF-8なので、引数が「-Sw」ということになります。

なお、変換前の文字コードが分からない場合は、変換後の文字コードだけを指定しても、変換前の文字コードを予想して変換してくれます。

今回は以上になります。

それではまた次回。 

bondingでNICを冗長化しよう。

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。タジです。

  今回は、サーバ周りの技術でNICを冗長化するbondingについてです。

LANケーブルを2本挿し、bondingを行えば、仮に片方が使えなくなってもネットワークを止めることなく動き続けます。 

では早速やってみましょう。

まずbondingモジュールを読み込むための設定ファイルを作成します。
CentOS 5.1の場合は/etc/modprobe.dディレクトリの下にbondingという名のファイルを作成します。

OSによって、/etc/modprobe.confに書き込んだり、modprobeの代わりにmodule.confに書き込んだりする必要があります。

#  vim /etc/modprobe.d/bonding

alias bond0 bonding
option bond0 miimon=100 mode=1 primary=eth0


OSの種類やバージョンにより、/etc/modules.conf内や/etc/modprobe.conf内に設定する場合もあります。

ネットワーク設定

次にネットワーク設定を行います。
ネットワーク設定は/etc/sysconfig/network-scriptsディレクトリ配下のifcfg-××××ファイルを編集します。
××××内には以下の名前を入れてください。

bond0

bond0は従来使用していたデバイスの設定ファイル(通常はifcfg-eth0)のデバイス名をbond0にするだけです。

DEVICE=bond0
BOOTPROTO=static
IPADDR=xxx.xxx.xxx.xxx

NETMASK=255.255.255.xxx

ONBOOT=yes

eth0,eth1

eth0はbond0の配下という形になるのでMASTERを指定する必要があります。
eth1はデバイス名をeth1にするだけなので割愛します。

DEVICE=eth0 (eth1)
BOOTPROTO=static
ONBOOT=yes
MASTER=bond0
SLAVE=yes
 

ここまで設定したら、ネットワークを再起動してみましょう。

どこか問題ない場所にPINGを送りながら、2本挿したケーブルの片方を抜いてみてください。

そのまま止まることなくPINGを送り続けていたら成功です。

それではまた次回。 

apacheでhttpsからhttpsへのリダイレクト方法

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは新人のカツオです。


今日は以前行った作業で、うまくいかなくてテンパった

apacheでのSSL接続からSSL接続へのリダイレクトについてご紹介したいと思います。

僕が行った作業はサイトのドメインを変更するというけっこう珍しい?作業でした。

ちょうどSSLの更新もあり、同時にドメインの変更。

そのときの作業項目に

「旧ドメインから新ドメインのURLにリダイレクトする。」

というものがあったんですね。

テスト環境(SSLは取得していない)では

apacheのhttpd.confファイルの設定で

virtualhostの設定項目に 

Redirect / https://xxxxxxxxxxxx.com/

の様に記述していました。

http接続→httpsの場合それで問題はありませんでした。

しかし

本番実施日になっていざ対応してみると

全然リダイレクトされない。。。。

どうやら、https接続でのリダイレクトはできないようです。

ということで別対応

ということで

redirect

ではなく

rewriteするという対応でことなきを得ました。

<VirtualHost 192.168.000.000:443 >
   RewriteEngine On
   RewriteCond %{HTTP_HOST} xxxxxxx.co.jp
   RewriteRule ^/(.*)$ https://yyyyyyyy.com/$1 [R=301,L]
</VirtualHost> 

 てゆう具合に書きました。

※xxxxxxx.co.jpが旧ドメインで、https://yyyyyyyy.com/が新ドメインです。

https→httpsのリダイレクトの場合は注意しましょう。

PostgreSQL8.3でウォームスタンバイの設定

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

どうもメガネです。5回目です。

今回はPostgreSQLでのウォームスタンバイの設定を行います。

PostgreSQL8.3からウォームスタンバイの設定が簡単になったので紹介します。

今回は1台のマシンで2つのデータベースインスタンスを作成して環境を作って行きます。

$はPostgreSQLのスーパーユーザで実行してください。

 

まずpg_standbyをインストールします。

 

$ cd /usr/local/src/postgresql-8.3.0/contrib/pg_standby

$ make

$ make install

 

次に/tmpディレクトリにdb1(マスターDB)とdb2(バックアップDB)というインスタンスを作成します。db2はdb1のコピーを使うのでここでは作成しません。

 

$ cd /tmp

$ initdb –n-locale db1

 

次にアーカイブログを格納するためのディレクトリを作成します。

 

$ mkdir archive1

$ mkdir archive2

 

そしてdb1/postgresql.confに以下の3行を追加します。

 

$vi /tmp/db1/postgresql.conf

 

archive_mode = on

archive_command = ‘cp %p /tmp/archive1/%f’

archive_timeout = 10

 

ここではarchive_commandとしてcpをしていますが異なるマシンでウォームスタンバイを構成する場合scpやmountを使ってバックアップDBから参照場所にアーカイブログを出力する必要があります。

 

主系の起動

 

$ pg_ctl start -D /tmp/db1

 

主系の完全バックアップを作成

 

$ psql -c “select pg_start_backup(‘backup’)” template1

$ cp -pR db1 db2

$ psql -c “select pg_stop_backup()” template1

 

 バックアップDBのpostgresql.confの設定

 $ vi /tmp/db2/postgresql.conf

 

archive_mode = on

archive_command = ‘cp %p /tmp/archive2/%f’

archive_timeout = 10

port = 5433

 

db2の中からpostmaster.pidとpg_xlogの中を消す。

$ rm db2/postmaster.pid

$ rm db2/pg_xlog/*

rm: db2/pg_xlog/archive_status: is a directory

$ rm  db2/pg_xlog/archive_status/*

 

バックアップDBのrecovery.confを設定

 

restore_command = ‘pg_standby -l -t /tmp/trigger /tmp/archive1 %f %p %r’

 

バックアップDBの起動

 

$ pg_ctl start -D /tmp/db2

$ psql -p5433

psql: FATAL: the database system is stating up

という表示されるはずです。

 

リカバリーの実行

 
db1で実行
$ createdb testdb

$ psql testdb

testdb=# create table test(t timestamp);
CREATE TBALE
testdb=# insert into test(now());
INSERT 0 1
testdb=# insert into test(now());
INSERT 0 1
testdb=# insert into test(now());
INSERT 0 1
testdb=# select * from test;
 
DB2で以下のようにアーカイブログがリストアされたメッセージが表示されます。
LOG: restored log file “0000000 10000000000000000C” from archive
LOG: restored log file “0000000 10000000000000000D” from archive
LOG: restored log file “0000000 10000000000000000E” from archive
LOG: restored log file “0000000 10000000000000000F” from archive
 
$ pg_ctl -D db1 stop
$ cd /tmp
$ touch trigger # 今回は手動でファイルを作成しましたがdb1を常に監視しているシェルスクリプトを作成してdb1の反応がなくなった瞬間にtriggerを作成すれば自動で切り替えることができます。

DB2が起動するはずです。これでリカバリは完了しているはずです。最後にきちんと同期がとれていることを確認します。

DB2で実行

$ psql -p 5433 testdb
testdb=# select * from test;
DB1で表示された結果と同じであれば成功です。

以上です。

Net/HTTPで圧縮ファイルをダウンロードしよう。

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

はじめまして。

KBMJエンジニアのタジと申します。

ここでは仕事の中で出会った様々な問題をメモしていこうと思っています。 

今回はRubyのライブラリであるNet/HTTPで、lzhファイルをDLする方法です。

Net/HTTPはその名の通りHTTPを扱うためのライブラリで、非常に多くの機能を持っています。

今回はその中でも一番簡単なWebページにアクセスして 内容を持ってくる機能を使いましょう。

では実際に作ってみます。

 require ‘net/http’

 Net::HTTP.version_1_2

     File.open([ファイル名],”wb”) do |f|
       Net::HTTP.start([ドメイン名], 80){|http|
       f.print http.get([対象のファイルまでパス]).body
     }
     end

簡単に解説します。

まず頭にライブラリを読み込んだ後、バージョンを指定しています。

次にファイルを開いて保存したい名前のファイル名でファイルを開きます。

ファイルオープンの際に、書き込みモードとして”wb”を指定します。

この時、書き込みモードを指定するのにバイナリとして記述するという”b”を忘れないでください。

圧縮ファイルはバイナリファイルに分類されます。

次にNet::HTTP.startで接続を開始します。

引数として、対象のドメイン名とポート番号を指定します。

最後に取ってくるHTTPドキュメントのパスを指定して、中身を先ほど開いたファイルに書き込んでおしまいです。

ドメイン名とパスは少しややこしいですが、ドメインはURLの前半部のサーバ名を、パスはその中のファイルの位置を表しています。

例えるなら、「http://doruby.kbmj.com/beginner」というURLなら「http://」までが使用プロトコル、「doruby.kbmj.com」までがドメイン名、「beginner」がパスとなります。 

解説は以上です。

もっとスマートなやり方もありそうなので、色々勉強していきたいと思います。

それではまた次回。

capistranoでmongrel,apache,rsync

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちはtacchiです。
以前TrinityTさんが書いてたcapistranoのすすめのつづきです。
更新されないので勝手に書いちゃいます。

以下の動作をさせたかったので、taskを自分で作ってみようと言う事になりました。
・特定のサーバのmongrelの起動、停止、再起動をさせたい
・特定サーバのapacheの起動、停止、再起動をさせたい
・rsyncでファイルを転送させたい

これがmongrelの起動、停止、再起動です。

  namespace :mongrel do
    desc ‘app01,app02 mongrelのrestart’
    task :restart, :roles => [:app1, :app2] do
     run “source /home/hoge/.bash_profile;
          /etc/init.d/mongrel_cluster restart;
          isAlive=`ps -ef | grep ‘ruby’ | grep -v grep | wc -l`;
          if [ $isAlive == 0 ]; then
             echo ‘error mongrel restart’;
             exit 1;
          fi;
          echo ‘success mongrel restart!’;
          exit 0;”
    end

    desc ‘app01,app02 mongrelのstart’
    task :start, :roles => [:app1, :app2] do
      run “source /home/hoge/.bash_profile;
          /etc/init.d/mongrel_cluster start;
          sleep 3;
          isAlive=`ps -ef | grep ‘ruby’ | grep -v grep | wc -l`;
          if [ $isAlive == 0 ]; then
             echo ‘error mongrel start’;
             exit 1;
          fi;
          echo ‘success mongrel start!’;
          exit 0;”
    end

    desc ‘app01,app02 mongrelのstop’
    task :stop, :roles => [:app1, :app2] do
      run “source /home/hoge/.bash_profile;
          /etc/init.d/mongrel_cluster stop;
          sleep 3;
          isAlive=`ps -ef | grep ‘ruby’ | grep -v grep | wc -l`;
          if [ $isAlive != 0 ]; then
             echo ‘error mongrel stop’;
             exit 1;
          fi;
          echo ‘success mongrel stop!’;
          exit 0;”
    end
  end

これがapacheの起動、停止、再起動です。

  namespace :apache do
    task :start, :roles => [:web1,:web2] do
      sudo “/usr/local/apache2/bin/apachectl start;”
      run “ps -ef |grep http”
    end

    task :stop, :roles => [:web1, :web2] do
      sudo “/usr/local/apache2/bin/apachectl stop;”
      run “ps -ef |grep http”
    end

   task :restart, :roles => [:web1, :web2] do
      sudo “/usr/local/apache2/bin/apachectl restart;”
      run “ps -ef |grep http”
    end
  end

これがrsyncです

set(:parts_file) do
  Capistrano::CLI.ui.ask ‘enter parts file: ‘
end

set(:parts_insert_server) do
  Capistrano::CLI.ui.ask ‘enter remote server ip: ‘
end

set :deploy_to, “/path/to/project”

     desc ‘部分的なファイルを転送できます。プロジェクト以下のファイルを指定して下さい。’
  namespace :rsync do
     task :parts, :roles => :local do
       run “/usr/local/bin/rsync -avz –delete -e ssh #{deploy_to}/#{parts_file} #{parts_insert_server}:#{deploy_to}/#{parts_file}”
     end
  end

てかインデントの為に、nbsp入れないといけないのなんとかならないすかね。。。

今週のRuby on Rails最新情報

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

以下の投稿は、 Riding Railsの記事を筆者が独断で翻訳したものです。

誤訳の指摘や、コメント歓迎します。http://weblog.rubyonrails.com/2008/7/11/this-week-in-rails-july-11-2008 

第3回目のRailsコミュニティからの週刊レポートです。この2週間ほどはかなり忙しく、投稿が遅れたことを謝罪します。2週間内の最も興味深い出来事やニュースを紹介します。

Jamis Buck氏からのメンテナンスリリースの発表からはじめます。Capistrano 2.4.3 と Net::SSH 2.0.3 が2週間前にリリースされました。利用者はアップグレードを検討してください。

Rails2.1はリリースされてからしばらく経ちますが、まだ情報を得ていない場合は、こちら のリンクからたくさんの有益な情報へのリンクがあります。

SSL更新時のエラー 改行コードの注意点 for mac

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

どもKBMJ新人のカツオです。

今日はSSL更新の際のサーバー証明書をapacheにインストールしたのですが、

apacheの再起動かけてもエラーでサイトが表示されなくなってしまった時がありました。

今日はSSL更新などで

SSL証明書のインストールで注意すべき改行コードについてご紹介です。

というわけで、僕はSSL更新のために



SSL発行のために、CSRを作成し、SSL証明書発行会社に送りました。

そしSSL証明書(サーバーID)を取得しました。

そして、コピペして、apache配下にCSRとともにサーバーIDを置いて

apache再起動しました。

しかし、なぜかエラーの表示とともにサイトが見れなくなっている!!
 

焦った、新人カツオ焦りました。

焦りながらも原因の調査をしていると、わかりました。


どうやら改行コードがおかしいらしい。。。

改行コードには

・LF

・CR

・CR-LF 

というものがあるそうです。

僕の環境はmacなのですが、 

どうやら、サーバーIDをコピペして貼付けたときに

改行コードがmacの改行コードがCRって形式になってたみたいです。

unix環境で見ると

改行が全部

^M 

になっており、それが原因で、サーバーIDを読み取れなかったみたいです。。。

いやはや、そのときはエディタでLF形式の改行コードしなおしたサーバーIDのファイルつくってapacheにあげ直しましたよ。

その結果、無事サイトのSSL更新できました。

後で調べたらCRの改行コードをLFに変える方法というのもあるらしいですけど

それままたの機会に! 

いやはや本当、目に見えないことが原因というのは怖いですな。

今日は以上で、またあいましょう。

Rubyでどう書く?:RubyでWord文書を作成する

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

KBMJがZDnetで連載している記事を紹介します。コメントなどありましたらそちらでお願いします。

Rubyでどう書く?:RubyでWord文書を作成する 三浦義太郎(KBMJ)

RubyでPDFが作成できるなら、Wordだってできちゃうだろう――そんな試みです。

問題

第5回目のテーマは第2回「RubyでPDF履歴書を作成する」の変奏です。

第2回はRubyでPDF文書を作成するというお題でしたが、Microsoft Word文書を作成したいということも多いと思います。

というわけで、今回はRubyでWord文書を作成してみたいと思います。

回答例

require 'rdoc/template'
template = TemplatePage.new IO.read('name.xml')
File.open("result.xml", 'wb') do |f|
template.write_html_on(f, {'name' => $*[0]})
end

簡単すぎですね。

解説

今回のミソは、Word 2003から使えるようになったXML文書を使用しているところです。

元の文書は「name.xml」で、これはWord(筆者の環境では2007)で作成したものです。そのため、レイアウトはWordで行うことが可能です。

あとは文字を置き換えたい部分を「%name%」としてあげて、XML文書形式で保存します。

Wordで文書の元が作れるのが大きなメリットですね。

プログラムの実行は

ruby [作成したプログラム] [%name%に置き換えたい文字列] 

で、プログラムと同じフォルダにresult.xmlというファイルが作成されます。

開いてみると「%name%」が置き換えたい文字列になっているはずです。

最後に――

WordのXML文書は、無償で提供されている2003以降のWordビューワを導入することで閲覧できるので、対応したバージョンのWordを持っていなくても大丈夫です。

この機会に社内文書の作成などにRubyを導入してみてはどうでしょうか(まあ、Rubyじゃないとできないというわけじゃないですが……)。

mysqlでレコードの中身を一括置換する方法

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

おひさしぶりです。

新人のカツオです。

今日からKBMJでは新卒の研修も一段落し、

エンジニアは私服出勤なのです。

というのはさておき、

今日はmysqlでレコードの項目を一括置換する方法をご紹介したいと思います。

というわけでmysqlでテーブルの中身を一括置換するコマンドです。

UPDATE テーブル SET カラム=REPLACE (カラム,"置換させたい文字列","置換したい文字列");

簡単なSQLですねー。

これでばっちり置換できます。

本日はこれでおしまいです。

ではでは。 また

Edge Railsの最新情報

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

以下の投稿は、 Riding Railsの記事を筆者が独断で翻訳したものです。

誤訳の指摘や、コメント歓迎します。

http://weblog.rubyonrails.org/2008/7/6/living-on-the-edge-3

最近はあまりedge Railsに注目すべきことがありませんので、 Railsのコミットログを見ていただいて、指摘していないバグやマイナーチェンジを確認してください。ActionPackの書き直しやマルチスレッ ディングが少し進行中であり、ActiveModelでも少し作業をしています。ただ、まだなにも具体的ではありません。

script/serverにThinをサポートします

script/serverはThinの有無をチェックして利用します。Thinをプロダクションサーバで利用している場合は非常に便利です。developing時にも役にたちます。動作させるにはconfig.gem に ’thin’を追加する必要があります。

このパッチはfluxinの方から提供されました。

複数のテーブル上の状況がhashで指定することができます

Pratik氏は小さなとても便利な変更をActiveRecordにコミットしました。特定の状況を融合されたテーブルのhashに指定することができます。例で示したほうがわかりやすいと思います。

Anime.all(
:joins => :character,
:conditions => {
:active => true,
:characters => { :gender => 'female' }
}
)

 ActiveRecordクエリは全ての”active”なアニメの中の”female”なキャラクターを探すことができます。

同じappでDBを使い分ける

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

どうもメガネです。4回目です。 

今回は、railsで同じappの中で、違うDBを使う方法を説明します。

例えば、アドレスをhttp://192.168.0.2/test1と打った時とhttp://192.168.0.2/test2と打った時にデータの内容が違うということです。

どうやってやるかというとmongrelのポート番号で分けます。

まず、database.ymlの設定を行います。

test1:

adapter: postgresql

database: test1

username: postgres

password: PostgreSQLのパスワードを入力する。

encoding: utf-8       

test2:

adapter: postgresql

database: test2

username: postgres

password: PostgreSQLのパスワードを入力する。

encoding: utf-8

次にMigrateします。

$ rake db:migrate RAILS_ENV=test1

$ rake db:migrate RAILS_ENV=test2

mongrel_clusterの設定をします。

mongrel_cluster1.yml,mongrel_cluster2.ymlを作成する。

# vi mongrel_cluster1.yml
 
 user: ユーザ名
 group: グループ名
 cwd: アプリケーションの絶対パス
 port: 3000
 environment: test1
 servers: 3
 
 
# vi mongrel_cluster2.yml
 
 user: ユーザ名
 group: グループ名
 cwd: アプリケーションの絶対パス
 port: 3003
 environment: test2
 servers: 3

ディレクトリを作る。

# mkdir /etc/mongrel_cluster

作ったディレクトリにmongrel_cluster1.yml, mongrel_cluster2.ymlを移動させる。

# cp mongrel_cluster1.yml /etc/mongrel_cluster/
# cp mongrel_cluster2.yml /etc/mongrel_cluster/

自動起動用スクリプトを/etc/init.d以下にコピー

 # cp /usr/local/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/
resources/mongrel_cluster /etc/init.d/mongrel_cluster
 # vi /etc/init.d/mongrel_cluster

を編集する。

#PID_DIR=/var/run/mongrel_cluster      #コメントアウト
#USER=mongrel                          #コメントアウト

自動起動に登録する。

# chkconfig --add mongrel_cluster
# chkconfig mongrel_cluster on

つぎにhttpd.confの設定をします。

# vi /usr/local/apache2/conf/httpd.conf

ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
  Order Deny,Allow
  Allow from all
</Proxy>
RewriteEngine On
#RewriteRule ^/test1(.*)$ balancer://cluster1%{REQUEST_URI} [P,QSA,L]
#RewriteRule ^/test2(.*)$ balancer://cluster2%{REQUEST_URI} [P,QSA,L]
RewriteRule ^/test1(.*)$ balancer://cluster1%{$1} [P,QSA,L]
RewriteRule ^/test2(.*)$ balancer://cluster2%{$1} [P,QSA,L]
 
<Proxy balancer://cluster1>
 BalancerMember http://192.168.0.2:3000 loadfactor=10
 BalancerMember http://192.168.0.2:3001 loadfactor=10
 BalancerMember http://192.168.0.2:3002 loadfactor=10
</Proxy>
 
<Proxy balancer://cluster2>
 BalancerMember http://192.168.0.2:3003 loadfactor=10
 BalancerMember http://192.168.0.2:3004 loadfactor=10
 BalancerMember http://192.168.0.2:3005 loadfactor=10
</Proxy>

以上で設定は終わりです。

ブラウザでhttp://192.168.0.2/test1とhttp://192.168.0.2/test2と打って正常にアクセスできれば完了です。

Rubyでどう書く?:重複したRSSをまとめる

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

KBMJがZDnetで連載している記事を紹介します。コメントなどありましたらそちらでお願いします。

Rubyでどう書く?:重複したRSSをまとめる 高瀬裕一(KBMJ)

「ネットの話題を追いかけるために、はてブのホッテントリやlivedoor クリップの人気ページをRSSで取得しています。でも、重複していることも多いんです。助けてください」(32才 男性・家事手伝い)――よろしい、ならばRubyで書こう。 

第4回目のテーマは「重複したRSSをまとめる」と題しまして、Rubyで複数のRSSから重複したエントリを除去する問題を出します。

問題

 最近、はてなブックマークやlivedoor クリップなど、ユーザーが外部のサイトを集めて、その結果を出力するサービスが増えてきました。

 ただ、一部のサイトを見ているだけで話題を追うことができるので便利なのですが、同じURLが複数のRSSにあり「もうこれは見たのに……」という事も多いですよね。

 そこで今回は、複数のRSSを一つのRSSとして出力するプログラムを問題にします。

仕様

  • RSSのURLは、コマンドラインから引数として1個以上与えられる。
  • 結合した結果のRSSのタイトルおよび説明は、各引数のタイトルをつなげたものとする。
  • 結合した結果のRSSのURLは第一引数のURLとする。
  • フィードのリンク先が同一のものを同じフィードとして扱う。
  • 出力順は第一引数のものを順に出力し、その後第二引数、第三引数のものを順に出力する(同じフィードとして扱うものは除外する)。
  • 重複したものは前の引数の内容を出力する。
  • 出力先は標準出力とする。
  • 出力するRSSのバージョンは2.0

回答例

 1 require 'rss'
  2
  3 rss_feeds = rss_urls = []
  4 title=""
  5
  6 ARGV.each do | rss_url |
  7   open(rss_url) do | http |
  8     response = http.read
  9     rss_results = RSS::Parser.parse(response, false)
 10    
 11     if rss_results && rss_results.channel && rss_results.channel.title
 12       title += " と " if title.size > 0
 13       title += rss_results.channel.title
 14     end
 15    
 16     rss_results.items.each do | item |
 17       unless rss_urls.include? item.link
 18         rss_urls << item.link
 19         rss_feeds << item
 20       end
 21     end
 22   end
 23 end
 24
 25 rss = RSS::Maker.make("2.0") do | writer |
 26   writer.channel.title = title || ""
 27   writer.channel.link = rss_urls[0] || ""
 28   writer.channel.description = title || ""
 29   rss_feeds.each do | feed |
 30     feed.setup_maker(writer)
 31   end
 32 end
 33
 34 puts rss.to_s

 試しに、livedoor クリップ 人気ページと、はてなブックマーク 人気エントリーを取得してみましょう。

ruby rss.rb http://clip.livedoor.com/rss/hot http://b.hatena.ne.jp/hotentry?mode=rss

 本記事を執筆時点では、実行結果は以下のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>livedoor クリップ - 人気ページ と はてなブックマーク 最近の人気エントリー</title>
    <link>http://clip.livedoor.com/rss/hot</link>
    <description>livedoor クリップ - 人気ページ と はてなブックマーク 最近の人気エントリー</description>
08-06-23 22:52 $ ruby "test.rb" "http://clip.livedoor.com/rss/hot" "http://b.hatena.ne.jp/hotentry?mode=rss" | head -20
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>livedoor クリップ - 人気ページ と はてなブックマーク 最近の人気エントリー</title>
    <link>http://clip.livedoor.com/rss/hot</link>
    <description>livedoor クリップ - 人気ページ と はてなブックマーク 最近の人気エントリー</description>
    <item>
      <title>Engineer25 すべてを楽しむ若きスーパーエンジニア達 第4回 cho45氏- ウェブキャリア</title>
      <link>http://www.web-career.com/contents/engineer25/4.html</link>
      <description></description>
      <dc:subject>interview</dc:subject>
      <dc:subject>ruby</dc:subject>
      <dc:subject>javascript</dc:subject>
      <dc:subject>program</dc:subject>
    </item>
    <item>
   ...中略...
    </item>
  </channel>
</rss>

解説

 本サンプルプログラムは、大きく3段階の処理になっています。

 第1段階(6行目から9行目)では、渡された引数を元に各ページにアクセスし、RSSを解析しています。

 第2段階(11行目から20行目)では、rss_feeds内にRSSを分解したフィードの内容を登録しています。

 今回は第一引数の出力内容を優先するので、順番を管理しやすいArrayに登録しました。そして、重複チェック用に、rss_urlsというArrayを作って、登録時にそこにurlを入れ、urlが既に登録されていないかチェックをしています。

 第3段階目(25行目から34行目)では、全RSSの取得を完了した後で、makeでRSSを再生成して出力しています。

最後に――

 今回のお題は主に自分が必要と感じるものを作ってみました。

 パーサが標準のライブラリにあるので特に手間無く作れましたが、もうちょっと実用度を上げようとすると、サーバが落ちている場合や、引数が間違えている場合などの例外処理を組み込むのも良いと思います。

 こんな風に作ってみたよという方が居られましたら、コメントやbuilderブログなどで教えていただきたいと思います。

最近人気な記事