ホーム ブログ ページ 59

keepalivedの設定

0

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

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

「keepalived」とはIPVS※を冗長化してるものです。
※IPVSとはロードバランサを中心に、リアルサーバーのクラスタとして
  バーチャルサーバーを構築することで、エンドユーザーからは1つのサーバー
  として見えるようにすることです。1~4はLBサーバで行います。
5~は実サーバで行います。

1 ipvsadmのインストール
実際の操作はこのipvsadmを利用することになります。
#yum install ipvsadm

2 keepalivedのインストール
RPMを使用するので適当に用意してください。
#rpm -ivh keepalived-1.1.13-6.i386.rpm

3 設定ファイルの変更
#vi /etc/keepalived/keepalived.conf

以下の場合

VIP 10.0.0.100
ソースIP 10.0.0.101
ソースIP 10.0.0.102

############################################################
virtual_server 10.0.0.100 80 {
  delay_loop  3
  lvs_sched   rr
  lvs_method  DR
  protocol    TCP
  real_server  10.0.0.101 80 {
    TCP_CHECK {
      connect_timeout 30
    }
  }
  real_server  10.0.0.102 80 {
    TCP_CHECK {
      connect_timeout 30
    }
  }
}
vrrp_instance vip_test {
  state BACKUP
  interface eth0
  virtual_router_id 1
  priority 100
  virtual_ipaddress {
    10.0.0.100 dev eth0
  }
}
############################################################

4 keepalivedの起動
#/etc/init.d/keepalived start
 VIPが応答することを確認します。
#ping 10.0.0.100

実IPが10.0.0.101と10.0.0.102サーバで以下のループバックの設定を行います。

5 ループバックの設定

############################################################
DEVICE=lo:0
IPADDR=10.0.0.100
NETMASK=255.255.255.255
NETWORK=10.0.0.0
BROADCAST=10.0.0.255
ONBOOT=yes
############################################################

#ifup lo:0

6 ARPへの対応
#vi /etc/sysctl.conf

############################################################
##最終行に以下を追加
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
############################################################

#sysctl -p

以上で終了です。

Apacheの負荷状況をモニタリングするツール「apachetop」

0

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

TOPコマンドのようにapacheログからモニタリングできる「apachetop」
このツールのCentOS5.3へのインストールを実施してみます。

インストール方法はいくつかありますが、rpmでインストールしてみました。
(「yum install apachetop」もあります)

# wget http://centos.karan.org/el4/extras/stable/i386/RPMS/apachetop-0.12.5-2.el4.kb.i386.rpm
# rpm -ivh –nodeps apachetop-0.12.5-2.el4.kb.i386.rpm

これでインストールは終わりです。
利用方法は下記のようなので、実行してみます。

書式:apachetop -f アクセスログのファイル名

# apachetop -f /usr/local/apache2/logs/access_log
apachetop: error while loading shared libraries: libreadline.so.4: cannot open s
hared object file: No such file or directory

エラーになりました。
エラー解消のため、シンボリックリンクを張ります。
(エラーにならなければこの設定は飛ばしてください)

# cd /usr/lib
# ln -s libreadline.so.5.1 libreadline.so.4

再び実行
すると、下記が立ち上がりました。

last hit: 05:33:53         atop runtime:  0 days, 00:01:00             05:33:54
All:          346 reqs (   6.1/sec)        152.7K ( 2742.5B/sec)     451.8B/req
2xx:       9 ( 2.6%) 3xx:     337 (97.4%) 4xx:     0 ( 0.0%) 5xx:     0 ( 0.0%)
R ( 30s):     105 reqs (   3.5/sec)         35.1K ( 1197.9B/sec)     342.2B/req
2xx:       6 ( 5.7%) 3xx:      99 (94.3%) 4xx:     0 ( 0.0%) 5xx:     0 ( 0.0%)

 REQS REQ/S    KB KB/S URL
   11  0.61   7.2  0.4*/projects/activity/test
   10  0.33   0.0  0.0 /stylesheets/application.css
   10  0.33   0.0  0.0 /javascripts/dragdrop.js
   10  0.33   0.0  0.0 /javascripts/effects.js
   10  0.33   0.0  0.0 /javascripts/prototype.js
   10  0.33   0.0  0.0 /stylesheets/jstoolbar.css
   10  0.33   0.0  0.0 /javascripts/application.js
   10  0.33   0.0  0.0 /javascripts/controls.js
    6  0.33   0.0  0.0 /images/feed.png
    5  0.28   0.0  0.0 /images/attachment.png
    3  0.14   0.0  0.0 *
    2  0.10   5.7  0.3 /projects/show/test
    2  0.10   0.0  0.0 /images/time.png
    2  0.07   0.0  0.0 /images/22×22/projects.png
    2  0.07   0.0  0.0 /
    1  1.00  22.2 22.2 /projects/test/issues
    1  1.00   0.0  0.0 /images/true.png

リクエストされたURL等が参照できます。
デフォルトの設定ですと、直近の30秒のものがモニタリングされ、5秒置きに再描画します。
実行時のオプション指定で、モニタリング時間、描画時間等の調整が可能です。
例.直近60秒のログをモニタリングし、10秒置きに再描画

apachetop -f /usr/local/apache2/logs/access_log -T 60 -d 10

apachetop実行時に指定できるコマンドは下記の通りです。
※ターミナル上で”apachetop -h”を入力すれば参照できます。

# apachetop -h
ApacheTop v0.12.5 – Usage:
File options:
  -f logfile  open logfile (assumed common/combined) [/var/log/httpd/access_log]
              (repeat option for more than one source)

URL/host/referrer munging options:
  -q          keep query strings [no]
  -l          lowercase all URLs [no]
  -s num      keep num path segments of URL [all]
  -p          preserve protocol at front of referrers [no]
  -r          resolve hostnames/IPs into each other [no]

Stats options:
  Supply up to one of the following two. default: [-T 30]
  -H hits     remember stats for this many hits
  -T secs     remember stats for this many seconds

  -d secs     refresh delay in seconds [5]

  -h          this help

Compile Options: -HAVE_KQUEUE -HAVE_FAM -ENABLE_PCRE
Polling Method: stat

また、apachetop実行中に使用できるコマンドは下記の通りです。
※apachetop実行中に”h”を入力すれば、参照できます。

ApacheTop version 0.12.5, Copyright (c) 2003-2004, Chris Elsworth

ONE-TOUCH COMMANDS
d          : switch item display between urls/referrers/hosts
n          : switch numbers display between hits & bytes or return codes
h or ?     : this help window
p          : (un)pause display (freeze updates)
q          : quit ApacheTop
up/down    : move marker asterisk up/down
right/left : enter/exit detailed subdisplay mode

SUBMENUS:
s:  SORT BY: [the appropriate menu will appear for your display]
        r) requests  R) reqs/sec  b) bytes  B) bytes/sec
        2) 2xx   3) 3xx   4) 4xx   5) 5xx

t:  TOGGLE SUBDISPLAYS ON/OFF:
        u) urls  r) referrers  h) hosts

f:  MANIPULATE FILTERS:
        a) add/edit menu c) clear all  s) show active (not done yet)
        a:  ADD FILTER SUBMENU
                u) to urls  r) to referrers  h) to hosts

モニタリングを終了したい場合は”Ctrl + c”で抜けてください。


どのURLに対してアクセスが多い等、リアルタイムに確認したい場合に使えそうですね。

apacheでアクセス制限をしてみよう その2

0

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

こんにちは。タジです。

今回は前回の続きで、apacheのもう一つのアクセス制限である、IP制限について解説したいと思います。
IP制限とはその名の通り、アクセス元のIPを指定し、該当するIP以外からの接続は403エラー(権限がありませんというエラー)を返すようにする設定です。

では実際に設定してみましょう。

やり方は、apacheの設定ファイル内の、ディレクトリやロケーションのディレクティブ内に、以下のように記述します。

Order deny,allow

Deny from all

#localhost

Allow from 127.0.0.1

#gateway

Allow from 192.168.1.1

上記はアクセスがあった際、サーバ内で自身を参照した時と特定のゲートからのみ接続を許可するという設定です。

Allowを追加することで、客先や監視会社など、IPを追加することが可能です。 この書き方は、.htaccessに書いた場合でも同じになります。

今回はここまでです。

それではまた次回。

不要なCSSを洗い出せるRuby製のツール

0

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

 こんにちは。

 KBMJでRuby on Rails を使ったweb開発に携わっているyoppiといいます。

 今回はRuby製の不要なCSSを洗い出せるツールをRailsのプロジェクトで使う場合の説明をさせていただこうと思います。

 Ruby製の不要なCSSを洗い出せるツールは、css-redundancy-checkerというものです。

 ツールといっても1つのrubyファイルなだけで、セットアップといってもSubversionのリポジトリからチェックアウトするだけです。サイトにも書いてありますが、hpricotが必要なので入っていなければ、インストール(gemで入れるのが簡単です)する必要があります。

 Railsプロジェクトのscripts/css-redundancy-checkerというところにチェックアウトしたとすると、Railsプロジェクトのルートディレクトに移動して、以下のような感じで実行できます。(下記の例は、public/stylesheets/common.cssで不要な項目をチェックしたい場合です)。ちなみに、ローカル環境の場合は、script/server等でサーバーを起動しておく必要があります。

 ruby script/css-redundancy-checker/css-redundancy-checker.rb public/stylesheets/common.css check_urls.txt

【実行結果例】

Parsing all html files within check_urls.txt for selectors in public/stylesheets/common.css...
-------------
Parsing http://localhost:3000/
Parsing http://localhost:3000/users
Parsing http://localhost:3000/users/show/1
・・・-------------
The following selectors are NOT used in of the html files in check_urls.txt
-------------
#main.sub・・・

 check_urls.txtには、チェックしたいページのURLを1行ごとに書いてあります。(ちなみにファイル名は、.txtで終わっていれば何でも大丈夫です)

【記述例】

http://localhost:3000/ http://localhost:3000/usershttp://localhost:3000/users/show/1・・・

 チェックしたいCSSが複数ある場合は、そのファイル分だけ、実行していくことになります。

 このツールだとローカル環境でもチェックできるがいいですね。Rails開発ならRubyも入っているので便利です。

 CSSファイルにに不要な項目が増えてきていると感じ始めたら、是非使ってみて下さい!

監視ツール Nagios

0

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

他のメンバーがすでに「munin」や「cacti」について
記事を投稿していますので、私は「nagios」について書いてみたいと思います。

■nagiosとは?
ネットワーク・サーバ監視のためのアプリケーションソフト。
オープンソースで開発をされ、自由に使用できる。

また各種プラグインも豊富であり
機器の生死確認以外にも、機器のリソース(memory使用量やHDD使用量など)についても
監視ができるなかなかの優れものです。

□入手先
Nagiosの公式HP
http://www.nagios.org/

他にも「yum」や「apt」でインストールが出来るようです。
今まで、centOSやdebianの環境で動くnagiosサーバを見たことありますが
ソースからコンパイルした場合とパッケージ管理からインストールした時の違いや
バージョンによるデフォルトに用意されているコンフィグファイルの違いなど
それぞれ違いがありますので、複数台用意する際は注意が必要です。



■インストールについて
 OS        =    CentOS 5.3 (selinuxは今回停止をしています)

 nagiosの種類    =    nagios-3.0.6 (執筆時の最新安定版)
 

□必要なモジュールやソフトを確認

<参照>
http://nagios.sourceforge.net/docs/3_0/about.html#requirements
1. A web server (preferrably Apache)
2. Thomas Boutell’s gd library version 1.6.3 or higher (required by the statusmap and trends CGIs)


「1」のwebサーバについては当たり前というところでしょう。
その他に「gd」を必要とするようですのでインストールされいなければ
インストールをしておきます。

例)
# yum -y install httpd gd gd-devel

また、この他にもソースをコンパイルする際にCのコンパイラが必要となりますので
「gcc」あたりもインストールされていなければ、インストールをしておきます。

例)
# yum -y install gcc glibc glibc-common


□インストールを開始
・nagiosユーザの追加、パスワードの設定

useradd -m nagios
passwd nagios


・nagiosの制御に関係するグループを追加、ユーザーの追加を行う

groupadd nagcmd
usermod -a -G nagcmd nagios
usermod -a -G nagcmd apache(webサーバの実行ユーザ!)


・ソフトとプラグインをダウンロードしてくる
cd /usr/local/src/
wget  http://osdn.dl.sourceforge.net/sourceforge/nagios/nagios-3.0.6.tar.gz
wget http://osdn.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.11.tar.gz


・nagiosのコンパイル・インストール
tar zxvf nagios-3.0.6.tar.gz
cd nagios-3.9.6
./configure –with-command-group=nagcmd
make all
make install
make install-init        (起動スクリプトのインストール)
make install-config        (コンフィグファイルのインストール)
make install-commandmode    (各種コマンドのインストール)
make install-webconf        (webサーバ向けのコンフィグをインストール)


・ベーシック認証用のパスワードファイルを作成
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
(パスワードを聞かれるので入力をする。)


■プラグインのインストール
監視の際に使うコマンドが定義されたプログラムファイルをインストールします。

・ソフトとプラグインをダウンロードしてくる
cd /usr/local/src/
wget http://osdn.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.11.tar.gz


・プラグインのコンパイル・インストール
tar zxvf nagios-plugins-1.4.11.tar.gz
cd nagios-plugins-1.4.11
./configure –with-nagios-user=nagios –with-nagios-group=nagios
make
make install


これだけ。
あとは「/usr/local/nagios/libexec/」に「check-***」がという実行ファイルが大量にあれば成功。


■nagiosの起動
・ウェブサーバを再起動をする(省略)

・コンフィグファイルの構文にミスがないか、確認を行う
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

errorやwarningが「0」であればOK。
もしもおかしい場所があれば教えてくれるので、大変便利なコマンドです!

・nagiosの起動
/etc/init.d/nagios start


http://??.????.??/nagios/
アクセスして確認してみましょう!


———————–

基本的なnagiosのインストールは以上です。
このほか、nagiosのコマンドにPATHを通したり
「chkconfig」コマンドを使用、naigosの自動起動の設定など
行った方が良いでしょう。

また、今回はselinuxは停止した環境で構築を行いましたが
selinuxを使用されている場合

chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin/
chcon -R -t httpd_sys_content_t /usr/local/nagios/share/

このような感じで、設定をしておく必要があるかと思われます。

QRコード【大きさを決める】

0

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

みわです。
本日もQRコードについて書こうと思います。
「QRコードの大きさについて!」QRコードは、白と黒のポチポチでできています(笑
このぽちぽちの数と大きさが、QRコード全体のサイズを決めます。
ポチポチは、「セル」っていいます。

1)数で大きくする
単純ですが、縦横に使うセルの数を増やせば、QRコードそのもののサイズは大きくなります。
→「バージョンを大きくする」といいます。

2)ポチポチの大きさを変える
1辺あたり10個のセルであっても、セルそのもののサイズが大きくなれば、QRコードの大きさも大きくなります。
「拡大コピー」をイメージしていただけるとわかりやすいかと思います。
→「エレメントサイズを大きくする」といいます。

「QRコードが読み取れない(><」とき、基本的には2)の方法で拡大します。
理屈は単純です。
「新聞の字が細かくて読みにくいんだけど、拡大コピーを取ったら読みやすくなった!」ってことです。

そうはいっても、サイトのデザイン上「ここまでが限界」ってラインもあるでしょう。
その時は、1)の方法と併用して拡大します。

QRのサイズは、以下の方法で求めることが可能です。
セルのサイズ(エレメントサイズとも)×1辺あたりのセルの数
ただし、セルサイズはmmのため、出てくる値もmmになります。
htmlやcssではピクセルという単位を使ってますから、mm⇔ピクセルの単位変換が必要になります。
でもまぁ、目安という意味ではmmでも十分かと・・・。

前回の「余白を取る」ことと併せて、お使いください。
これでQRコードはばっちり読み取れるようになるはず!
ケータイサイトへの誘導などで、QRコードは便利に利用されることが増えてきました。
せっかく作ったなら、しっかり読みとってもらわないと誘導もできませんから、読み取ってもらえるようにしたいですね!

次回は、「QRコードが持てる情報と大きさについて」を説明しようと思います(たぶん)。

簡単、携帯flash待受時計をつくる

0

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

【テーマ: 簡単、携帯flash待ち受け時計をつくる】

【使用するモノ: flashLite1.1 photoshop】

それでは早速やってみます。

(1)サイズ240px×400pxの新規flashファイルを作成します。

(2)適当に用意した背景を、ステージに読み込みます。

(3)ダイナミックテキストで、テキスト領域を3つ用意します。

   それぞれに以下の3つの変数名をあてます。

flash待ち受け時計制作

(4)Actionscript用のレイヤーを追加し、フレームを2つ用意します。

携帯待ち受けflashのActionscriptレイヤー

(5)フレーム1に下記のスクリプトを記入して時間を読みとってもらいます。

hour=fscommand2 (“GetTimeHours”) ;
minute=fscommand2 (“GetTimeMinutes”) ;
second = fscommand2(“GetTimeSeconds”);
if (minute<10) {
            minute=”0″ add minute
 }
if (second<10) {
            second=”0″ add second
 }

(6)フレーム2に、フレーム1を繰り返すように書きます。

gotoAndPlay (1);

(7)flashlite1.1で書き出して、完成です。

以上、「簡単、携帯flash待ち受け時計をつくる」でした。

とっても簡単なので、flashliteの初歩の初歩を学ぶのに良いのではと思われます。

ruby on railsでCAPTCHA(画像認証)を実装する。 simple_captcha編

0

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

こんにちは、KBMJの中平@railsエンジニアです。

今回はruby on railsでCAPTCHA(画像認証)を利用する方法です。
 * CAPTCHA(画像認証)とはgoogleやyahooなど会員登録をするときに表示される、ぐにゃぐにゃした文字の画像です。

CAPTCHAを実装するのはjavascriptとかrubyのプラグインも色々ありますが、

今回は ruby on railsプラグインのsimple_captchaを使用してみます。

 simple_captchaの特徴

  •    画像スタイルを選べる(ランダムも可能)
  •     認証する文字はアルファベットか数字かを選べる
  •   3レベルの画像の複雑さ(文字のぐにゃぐにゃ度合い)
  •     画像と文字はDB管理
  •     古い画像(一定時間認証されなかった画像)は自動的に削除

simple_captchaは、こちらのサイトで公開されています。
http://expressica.com/simple_captcha/

今回はsimple_captchaの使い方と、画像認証を行う時に物足りない部分をカスタマイズした方法も書こうと思います。

ます、インストールから
サイトを見ると使い方の手順が書いてあるのでその通りに実行します。
 

1.simple_captchaプラグインのインストール

ruby script/plugin install svn://rubyforge.org/var/svn/expressica/plugins/simple_captcha    
 もしくは直接ダウンロード
http://expressica.com/wp-content/plugins/wp-downloadMonitor/download.php?id=1

2.simple_captchaのセットアップ
 rails2系以上     
   rake simple_captcha:setup     
 

 rails1系
  rake simple_captcha:setup_old  
 
 続けて1系2系ともに
  rake db:migrate  

3.config/routes.rbの編集
    ActionController::Routing::Routes.draw do |map|  
     map.simple_captcha ‘/simple_captcha/:action’, :controller => ‘simple_captcha’  
    end    

4.app/controllers/application.rbの編集
   ApplicationController < ActionController::Base
    include SimpleCaptcha::ControllerHelpers
   end

つづいて、CAPTCHAを表示させたいアプリケーション側の編集です。
simple_captchaは、画像認証のチェックをcontrollerで行う方法とmodelで行う方法がございます。

まずcontroller側で認証させる場合

1. viewの編集
 画像認証をさせたいページに
   <%= show_simple_captcha %>  
 を追加
2. controllerの編集
 validateする個所に
if simple_captcha_valid?
 画像認証OKの処理を書く
else
 画像認証NGの処理を書く
end 
と書きます。



つぎにmodel側で認証する方法です。
  決まったテーブルを登録または更新する時に画像認証を行う事がほとんどですのでmodelに認証を持たせたほうが私は実装が楽だと思います。

たとえばuserモデル(会員登録など)で画像認証させる場合

1.viewの編集
<%= show_simple_captcha(:object=>”user”) %>
オプションの一例
:label => “画像の中の文字を入力してください”
captchaの説明文の変更
:image_style=>’simply_red’
画像の種類を決められます。
オプションを付けた例 
 <%= show_simple_captcha( :label => “画像の中の文字を入力してください。”,:image_style=>’simply_red’,:object=>”user”) %>

2. modelの編集
  class User < ActiveRecord::Basse  
    apply_simple_captcha :message => ” 画像に表示された文字を再入力してください。”, :add_to_base => true
  end  

オプションの
 messageとadd_to_baseはなくても使えます。
 これを付けると、デフォルトのエラーメッセージではなくmessageで指定した文字がエラーメッセージとして表示できます。

3. controllerの編集
 @user.valid? と書く部分を
 @user.valid_with_captcha?
 に
@user.save と書く部分を
@user.save_with_captcha
にします。

with_captcha?を付けることで画像認証が行われます。

これの便利な部分は他のところで
@user.saveとしたら、画像認証を行わないので
画像認証をするところと、しないところの切り分けが楽です。



これでrailsを起動しページ表示すると画像認証(CAPTCHA)が表示されます。


simple_captchのデフォルトじゃ物足りないのでカスタマイズしたこと

基本の使えるオプションなどは
vendor/plugins/simple_captcha/README
を見てください。
ベースの画像や画像の複雑さの設定方法が書かれています。

以下は自分がカスタマイズさせた方法を書きます。

問題1
simple_captchaのデフォルトだと入力したアルファベットの大文字小文字を区別しない

対応 vendor/plugins/simple_captcha/lib/simple_captcha_active_record.rb
の49行目あたりの
–          if captcha && captcha.upcase.delete(” “) == simple_captcha_value(captcha_key)

+          if captcha && captcha.delete(” “) == simple_captcha_value(captcha_key)
とし upcaseをとってしまう。

問題2
ランダムの文字数や英数字を混ぜたものを使いたい
vendor/plugins/simple_captcha/lib/simple_captcha_action_view.rb

def generate_simple_captcha_data(code)
で文字を生成しているので好きに書き換えてしまう

たとえばこうすると大文字小文字アルファベット+数字 のランダム6文字
 a = (‘a’..’z’).to_a + (‘A’..’Z’).to_a + (‘0’..’9′).to_a
 value= Array.new(6){a[rand(a.size)]}.join

*日本語はさすがに文字化けでした・・・

問題3
6文字以上の文字が使いたい
vendor/plugins/simple_captcha/assets/migrate/create_simple_captcha_data.rb
のマイグレートファイルでlimit=>6に指定されているので
無理に6文字以上にするとDB側ではじかれますので、
ここの数字を変えるか、マイグレーションファイルを追加して好きな文字数にするとよいです。

6文字以下はsimple_captcha_dataテーブルの変更はいりません。

以上です。

まとめ

simple_captchaを使えば 画像認証(CAPTCHA)が簡単に素早く実装ができます。
 10分もあれば導入が可能ですのでお試しください。
それと、プラグインのソースがきれいに書かれていますのでカスタマイズがしやすいと思います。

注意
*画像認証(CAPTCHA)は最近は破られる可能性があるという事ですので、スパムの対策に過信はしないほうがよいと思います
 次回は、画像認証以外の方法でスパムロボット対策方法を書けたらいいかなと思います。

apacheでアクセス制限をしてみよう その1

0

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

こんにちは。タジです。

今回は、apacheでのアクセス制限についてです。

ページにアクセスした際、IDとPassを聞かれることがあると思います。

いわゆるBasic認証というものです。


Basic認証は、ディレクトリ(<Directory /usr/local/apache/htdocs>)や、ロケーション(< Location /admin>)などのディレクティブで使います。

この設定は.htaccessというファイルに記述することもありますが、apacheの設定ファイル(httpd.conf)に書くこともできます。

書き方は比較的簡単です。

まず、認証に使うIDとPassを作ります。
作成には、apacheに付属しているhtpasswdコマンドを使用します。

htpasswd -c <ファイルを置く場所> <ID>

上記コマンドを使用すると、直後にパスワードの作成を求められます。
入力したパスワードは、ファイルを置く場所として指定された場所に、保持されるようになります。
htpasswdコマンドの-cというオプションは、ファイルを新規作成するためのオプションで、ユーザを追加する場合は付けないようにしてください。
(-cをつけると再度ファイルが新規作成されてしまいます。)

Basic認証では、IDとPassは特定のファイルに保存されるため、ファイルを置く場所と、使用するIDをコマンドの引数として渡す必要があります。
置く場所はどこでも構いませんが、外部から見えない方が望ましいです。

次に、apacheの設定ファイル内に、以下のように書きます。

<Location /admin>
AuthName "enter id and pass"
AuthType Basic
AuthUserFile /usr/local/apache2/conf/.htpasswd
Require valid-user
</Location>

AuthName:該当のページにアクセスした際に出てくる文言を設定します。
AuthType:認証のタイプを選択します。Basic認証以外にも、ダイジェスト認証などがあります。
AuthUserFile:パスワードを設定したファイルをフルパスで指定します。
Require:対象となるユーザを設定します。基本的にはvalid-userにしておけば、全てのユーザでパスが聞かれるようになります。

また、ディレクトリのディテクティブとロケーションのディテクティブの両方を使ったり、Requireでユーザを個別指定することで、初めにアクセスした際にIDとPassを聞かれ、さらに内部で特定のページにアクセスした際にIDとPassを聞かれるような構造にすることもできます。

例えば、require userA useB userCというディレクティブ1と、require userAというディレクティブ2があったとすると、はじめにディレクティブ1にアクセスした時に皆IDとPassの入力を求められ、userAとしてアクセスした人以外はディレクティブ2にアクセスした際に再度ディレクティブ2に設定されたIDとPassを入力する必要が出てきます。

今回はここまでです。

それではまた次回。

Railsのエラー画面への処理を読む

0

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

こんにちは。T氏です。 今日はRailsのエラー画面(public/404.htmlや500.html)への遷移はどうやってされているかをご紹介します。

エラー画面への制御は、actionpackrescue.rbで行っています。
*今回はactionpack-2.1.2である事前提に話を進めます。

 
では、処理が行われている実際のコードを抜き出して見てみましょう。
 

まず、Exceptionが発生するとrescue.rbのrescue_actionが呼び出されます。
ここではlocalhostか判定をして表示するviewの振り分けをしています。

      def rescue_action(exception)
        # logへの出力
        log_error(exception) if logger
        erase_results if performed?

        # Let the exception alter the response if it wants.
        # For example, MethodNotAllowed sets the Allow header.
        if exception.respond_to?(:handle_response!)
          exception.handle_response!(response)
        end

        # ここで判定をして、表示するエラー画面を切り分けている
        if consider_all_requests_local || local_request?
          # localhostだとこちら
          rescue_action_locally(exception)
        else
          # public以下の[status_code].htmlが呼ばれる
          rescue_action_in_public(exception)
        end
      end

 

次にlocalhostの場合に呼び出されるrescue_action_locallyを見てみましょう。
開発中によく見かけるエラー画面を出力しています。

      def rescue_action_locally(exception)
        add_variables_to_assigns
        # インスタンスに対してエラー文言やファイル名等をセットしている
        @template.instance_variable_set(“@exception”, exception)
        @template.instance_variable_set(“@rescues_path”, File.dirname(rescues_path(“stub”)))
        @template.send!(:assign_variables_from_controller)

        @template.instance_variable_set(“@contents”, @template.render_file(template_path_for_local_rescue(exception), false))

        # content_typeの指定
        response.content_type = Mime::HTML
        # rescues_pathではrescue.rbがあるディレクトリの下にあるlayout.erbを呼び出している
        render_for_file(rescues_path(“layout”), response_code_for_rescue(exception))
      end

 

最後に、rescue_action_in_publicメソッドを見てみましょう。
ここではファイル指定( [RAILS_ROOT]/public/[STATUS_CODE].html )をしています。

      def rescue_action_in_public(exception) #:doc:
        render_optional_error_file response_code_for_rescue(exception)
      end

      def render_optional_error_file(status_code)
        status = interpret_status(status_code)
        # pathとファイル名を指定している
        path = “#{Rails.public_path}/#{status[0,3]}.html”
        if File.exist?(path)
          # renderするファイルとステータスコードを指定
          render :file => path, :status => status
        else
          head status
        end
      end

 

以上がRailsのエラー画面への制御でした。

ボックスガチャの実装をしよう(ソーシャルゲームにおけるサーバーサイド) 5

0

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

このキャラクターにこれだけの価値があったのだろうか……? いや、ある、無ければ困る! だって、だって、だって、これだけのお金を掛けたんだもん! 高級なYAKINIKU以上の価値があるんだもん! もん! もん……。タン塩……。焼けて少し丸まった歯ごたえ豊かなタン塩にレモンをキュッと絞って……。

前回までのあらすじ

前回

 ボックスガチャのサーバーサイドのコードの実装が完了しました。
 残るは、テストコードの作成、マスタのインポート処理、クライアントとの繋ぎこみくらいです。

テストコードの実装をしよう

さーばーえんじにあ「仕様書からだと

・ボックスガチャは通常ガチャと同様、1連と10連で引ける
・ボックスガチャで引けるものは通常ガチャと同等
・10連を選択した時にボックスの中身が9個以下だった場合、消費される対象はその中身分のみとなり、全てを自動で排出する
・リセットする度に上限までボックスの中身は変わる
・リセットは自由に可能。そのステージのボックスガチャを1回も引かなくともリセットが出来る

 こんな感じのことが書かれていて、これに対応したテストコードと、
 まあ、後は普通のガチャと同じように、消費する物がそもそも足りなかった場合とかにエラーが起こることを書いておけばいいか。
 後、今回はGachaBoxContentManagerっていうボックスガチャの状態を一括管理するクラス作ったからそこの点でもテストコード作っておくか」

さーばーえんじにあ「必要なテストは

・ボックスガチャを1回引いた時、そして10回引いた時に
 ・ボックスの中身が正常に引かれている事
 ・ユーザーのキャラクターが増えている事
 ・ユーザーの消費対象物が減っている事
 ・ログが記録される事
・ボックスの中身が9個以下だった場合に10回引くを選択した場合に
 ・中身が空になり、ユーザーの消費対象もその分だけ減っている事
・リセットに対して
 ・正常にリセットが出来て
 ・次のステージのボックスがフルの状態である事
 ・リセットは指定回数より多くやろうとしたらエラー
......

 よし! 必要なテスト項目は20個オーバー!
 そしてそのテストをする為には

・ダミーキャラクターマスタ複数作って
 ・それに付随するキャラクターのパラメータマスタとか作って
・ダミーガチャマスタ作って
 ・ダミーボックスガチャ中身マスタ作って
・ダミーユーザー作る為に
 ・ユーザーランクマスタとかそういうのも必要で
・それ作ってからダミーユーザー作って
 ・ダミーユーザーに消費対象のブツを十分に渡した上で
・プロセスのコンストラクタを呼び出してプロセスを実行! 
 ・実行された事に対して想定される結果を書く!

 …………つ、疲れる。
 でも、書いとかないと、リファクタリングとか気軽に出来ない……。
 頑張ろう……」

マスタインポートの処理を書こう

ぷらんな「仮マスタ出来たよ」
さーばーえんじにあ「了解ですー。こっちもテストコード作成がキリ良いところなので、そっち先に対応しますー。
で、不正なマスタデータが入らないようにする為には、どういう事を制限を掛けておけば良いかなってのは……、

・通常ガチャ指定のガチャマスタは、ボックスガチャ内容マスタに子データを持っていてはならない
・ボックスガチャ指定のガチャマスタは、ガチャ内容マスタに子データを持っていてはならない
・ボックスガチャ指定のガチャマスタは、リセット制限回数が1以上を指定していなくてはいけない
・ボックスガチャ内容マスタにガチャコード単位で排出キャラクターに重複があってはならない
・ボックスガチャ内容マスタの排出キャラクター量は1以上でなければいけない
・ボックスガチャ内容マスタの内容のステージ数は、ボックスガチャ指定のガチャマスタのリセット制限回数と一致していなければならない

 ……えーっと、ざっと洗いだすとこの位かな……。他にプランナー目線とかからで抜けている事無いかな」
ぷらんな「あ、単純な事抜けてるね」
さーばーえんじにあ「えっ」
ぷらんな「ボックスガチャの排出キャラクターがマスタに実存するかの確認してないじゃん」
さーばーえんじにあ「あっ」

1時間後

さーばーえんじにあ「条件満たした上で仮マスタ入りましたー」
ぷらんな「やったぜ」


小ネタ:

・通常ガチャ指定のガチャマスタは、ボックスガチャ内容マスタに子データを持っていてはならない
・ボックスガチャ指定のガチャマスタは、ガチャ内容マスタに子データを持っていてはならない

こういう二つの条件は整理してみたりすると一つの条件に纏められます。

ガチャマスタ |内容が存在しているマスタ|正常か異常
通常ガチャ  |通常ガチャ       |正常
通常ガチャ  |ボックスガチャ     |異常
ボックスガチャ|通常ガチャ       |異常
ボックスガチャ|ボックスガチャ     |正常

即ち、

・ガチャマスタと対応する、内容が存在しているマスタが通常とボックスにどちらか片方のみにあり、そして一致している

と同等になります。
後、排他的論理和とかを使ったりしても簡潔に纏められる場合があります。
上記で使うならば、

・(ガチャマスタが通常である xor 内容が存在しているマスタが通常である)ならば異常である

となります。
まあ、簡潔に纏められても分かりづらい場合は、分かりやすさを優先して多少冗長になってもそちらの方が良いです(そもそも排他的論理和自体が分かりづらいかもしれない)。

RailsでOracle~ データベース初期化タスクをつくろう!編

0

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

TrinityTです。

今回はRails&Oracleに関する第二弾として、DBの初期化を行う独自タスクについて説明します。

普段の開発では、ダミーデータの削除やユニットテスト前の初期化など、テーブル構成を初期化したい場合にdb:migrate:resetタスクを活用して行っています。

しかし、OracleはMySQLやPostgresqlとテーブル管理の単位、ユーザなどの概念が異なるため、データベースの削除を行おうとするdb:migrate:resetタスクはエラーとなってしまいます。

本問題を解決するためのOracle用独自タスクを作ってみました。

以下の内容でファイルを${RAILS_ROOT}/lib/tasks に作成してください。

db_ora.rake

namespace :db_ora do
  namespace :migrate do
    desc "Reset Database (For Oracle)"
    task "reset" => ["truncate", "db:migrate"]

    desc "truncate all objects (For Oracle)"
    task "truncate" do
      # テーブル削除
      user_tables = UserTable.find(:all)
      user_tables.each do |table|
        ActiveRecord::Base.connection.execute("DROP TABLE #{table.table_name}")
      end
      # ビュー削除
      user_views = UserView.find(:all)
      user_views.each do |view|
        ActiveRecord::Base.connection.execute("DROP View #{view.view_name}")
      end
      # シーケンス削除
      user_sequences = UserSequence.find(:all)
      user_sequences.each do |sequence|
        ActiveRecord::Base.connection.execute("DROP SEQUENCE #{sequence.sequence_name}")
      end
    end

    # ユーザが持つテーブル一覧取得用Model
    class UserTable < ActiveRecord::Base
    end
    # ユーザが持つシーケンス一覧取得用Model
    class UserSequence < ActiveRecord::Base
    end
    # ユーザが持つビュー一覧取得用Model
    class UserView < ActiveRecord::Base
    end

    end
  end
end

コレで以下のコマンドをRAILS_ROOTで行うと、DB初期化とmigrationが行われます。

$ rake db_ora:migrate:reset

db_ora:migrate:resetタスクは作成した独自タスク(truncate)と、db:migrateタスクを組み合わせて行っています。

本タスクの流れは以下の通りです。

(1)truncateタスクを実行

(2)Oracleのシステムテーブル「user_tables」に格納されているテーブル名一覧を取得

(3)テーブルに対してDROP文を実行

(4)同様の処理をシーケンス、ビューに対して実行

(5)db:migrateタスクを実行し、dbの再構築を行う

このタスクを使うことでOracleでもdb:migrate:resetコマンドを擬似的に実行することが可能となります。

こんな感じで独自のオレオレrakeタスクを作ることは簡単なので、皆さんも是非作ってみてはいかがでしょうか!

Google Analyticsで特定のディレクトリのデータを取得する方法

0

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

Google Analyticsで特定のディレクトリのデータを取得する方法

アクセス解析チーム中林です。 サイトを運営していると一つのドメインで企業サイト、ECサイトを運営していることもあるかと思います。 そういった場合にGoogle Analyticsではプロファイルにフィルタを設定することで、特定のディレクトリのアクセスだけのデータを取得することが可能です。本日紹介するのは、 『特定のディレクトリ(サブディレクトリ)のアクセスだけを計測したい』 といった場合に、GoogleAnalyticsで特定のディレクトリのデータだけを取得するための設定方法を紹介します。  

特定ディレクトリのデータ取得にはフィルタを使用

  特定のディレクトリを計測するためには、プロファイルの編集によってプロファイルにフィルターをかける必要があります。 

Google Analyticsで特定ディレクトリのデータ取得の流れ

今回の例では、 http:www.kbmj.com/service/ というURLが有った場合に「service」ディレクトリのデータだけを取得してみます。  ①Google Analyticsにログインしてプロファイルの「編集」

GoogleAnalytifcsプロファイルの編集

  ②プロファイルに適用したフィルタから「+フィルタを追加」を選択 

GoogleAnalyticsプロファイルのフィルタ追加

   ③「プロファイルに新しいフィルタを追加」にチェックを入れます。Google Analyticsに新しいプロファイルを追加する

GoogleAnalytics特定アドレス除外のためのフィルタ追加

④フィルタ名は任意のものを入力  ※仮にフィルタ名前は「serviceディレクトリ」と設定します。 フィルタの種類は「サブディレクトリへのトラフィックのみを含める」 

GoogleAnalyticsの指定ディレクトリを計測

   サブディレクトリには取得したい特定のディレクトリを入力してください  ※今回は「^/service/」を入力 
 ■ポイント■
 「^」を先頭に入力することがポイントです。「^」を入力しないと、 http://www.kbmj.com/service/ のディレクトリだけでなく http://www.kbmj.com/hogehoge/service/ というディレクトリが有った場合に上記のアクセスについてもデータを取得してしまいます。  

GoogleAnalyticsのフィルタで特定のディレクトリのデータ取得設定

 これで「変更を保存」すれば、指定したディレクトリへのアクセスのみGoogle Analyticsのデータで取得することができます。 

IPアドレスを除外をする前に

 今回の作業をする場合、Google Analyticsのプロファイルから特定のディレクトリのみデータを取得するフィルタをかけた場合特定のディレクトリ以外のアクセスについては、フィルタを設定したプロファイルからは2度と取得することができません。  マスターとなるプロファイルは残しつつ、プロファイルは別途作成して、今回紹介したようなサブディレクトリを取得するフィルタをかけることが無難ですね。  今週は以上となります。

■アクセス解析関連記事■

*関連コンテンツのサイトを作る場合のドメインの使い分けについて

*Yahoo! Web Analytics とは? ~レポート機能を解説(日本語)~

*SEOのために知ってておいて損はないタグ知識?

Rails2にバージョンアップしたらcreated_atが世界標準時刻になってました

0

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

Rails2.3にバージョンアップし、ふとDB内のレコードの作成時刻を見てみたところ、実際の作成時と9時間のずれがありました。
UTCが適応されているみたいでした。

UTCのままですと分かりずらかったりもしますので、日本時間に合わせてみます。

ググってみたところ、config/enviroment.rb内を以下のように修正してみてとありました。
ちなみにDBはpostgresです。
修正前:config.time_zone = ‘UTC’
修正後:config.time_zone = ‘Tokyo’
結果:(現在時刻:14:34)>> Entry.create({:title=>’test’, :body=>’hello world’})
=> #<Entry id: 7, body: “hello world”, title: “test”, created_at: “2009-06-02 05:34:55”, updated_at: “2009-06-02 05:34:55”>
>> Entry.find(7).created_at
=> Tue, 02 Jun 2009 14:34:55 JST +09:00

登録したときにUTCなのが気になります。DBをのぞいてみたところ、UTCで保存されていました。test_dev=# select id, title, created_at from entries where id=7;
 id | title |         created_at         
—-+——-+—————————-
  7 | test  | 2009-06-02 05:34:55.273476

ググってみたところ、↓のも追加してねとありました。config.active_record.default_timezone = ‘Tokyo’
修正後結果:(現在時刻:14:38)>> Entry.create({:title=>’test’, :body=>’hello world’})
=> #<Entry id: 8, body: “hello world”, title: “test”, created_at: “2009-06-02 14:38:34”, updated_at: “2009-06-02 14:38:34”>
DB内:test_dev=# select id, title, created_at from entries where id=8;
 id | title |        created_at         
—-+——-+—————————
  8 | test  | 2009-06-02 14:38:34.34017

上手くいきました。 ばんざーい。
取り出してみました。>> Entry.find(8).created_at
=> Tue, 02 Jun 2009 23:38:34 JST +09:00

…だめでした。 日本時間+9時間されました。
config.time_zone = ‘Tokyo’ をコメントアウトしてみます。#config.time_zone = ‘Tokyo’
>> Entry.find(8).created_at
=> Tue, 02 Jun 2009 14:38:34 +0000

これでよさげです。
しかしこれだとRails1.0時代と設定が変わっていないような…。
もっと良い方法があるかもしれません。

rubyで外部コマンド実行

0

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

rubyからOSのコマンドやシェルなどの、外部コマンドを

実行する方法としていくつかあるようですので簡単にご紹介します。

バッククォートを使う

#!/usr/bin/ruby

result = `ls -lh`

単純な実行ならコレ。

system

#!/usr/bin/ruby

result = system(“ls -lh”)

print result

結果に真偽値が返ってきます。

exec

#!/usr/bin/ruby

begin

exec(“ls -lh”)

rescue

puts “error”

end

Kernelモジュール内。rescueでrubyの例外を拾えるのが特徴。

open

#!/usr/bin/ruby

result = open(“| ls -lh”)

print result.class # => IO

while !result.eof

print result.gets

end

result.close

ファイルのIOを行うときにopenを使いますが

引数のコマンドの前に「|」パイプを付けると、外部コマンドの実行が可能になります。

実行される外部コマンドの処理を非同期実行や子プロセスにするかなど、

の考慮が必要になりますので、要件に応じて使いわけると良いでしょう。

その他、open3やpopenを使うなど方法もあります。

環境:ruby 1.8.6

Flash Lite 開発入門

0

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

こんにちは。エンジニアの はる です。

Flash関連の記事や業務が多い私ですが、最近Flash Lite(携帯版Flash)を使用する機会があり、PC版Flashとの勝手の違いに四苦八苦してしまいました・・・。

そこで、今回は最も一般的に使用されている「Flash Lite 1.1」を主軸に、これからFlash Liteにチャレンジしてみたい方向けにFlash Liteの制限事項とその対応策を書いてみたいと思います。

1.Flash Lite のバージョン選択

Flash Lite開発を行う上で、まず初めに考えなければならないのがFlash Liteのバージョンです。

一般的にFlash Liteのバージョンは機能的な面から「1.0」「1.1」「2.0」「3.0」と分けられ、下位互換性があります。対応機種を広くカバーしたいのであれば、「Flash Lite 1.1」を選択するのがスタンダードです。


2.Flash Lite の制限事項

Flash Lite開発において、制作者の頭を悩ませる制限事項がいくつかありますので、代表的なものをご紹介します。

1. ファイルサイズ制限

 Flash Lite開発で最も配慮しなければならないのが、swfのファイルサイズです。機種によってこのファイルサイズ制限はまちまちですが、Flash Lite 1.1開発では100KB以内に抑えれば問題ありません。ファイルサイズ制限と超えてしまった場合、swf全体、もしくは一部コンテンツが真っ赤な状態で表示されます。

また、これは外部から読み込んだデータも含めてのファイルサイズ制限となりますので、足りないコンテンツは外部swfから読み込めば・・・という策は通じません。

2. メモリ使用量制限

Flash Lite関連のサイトを参照してもあまり記載されてはいませんが、意外と気にしなければならないのが、メモリ使用量です。Flash Lite 1.1開発では、1024KB以内に抑えれば問題ありません。

メモリ使用量はAdobe Device Centralを利用するのが便利です。開発環境がAdobe Flashであれば、パブリッシュ設定を「Flash Lite x.x」に設定しておけば、ムービープレビューをAdobe Device Centralで閲覧できるようになります。

3. 外部通信・外部データの読み込み

 PC版Flashでは、swf表示時に外部通信を行い、アクセス解析データを送信したり、外部からデータを読み込んだりする方法がよく用いられますが、Flash Liteではセキュリティ上の制限があります。

まず、Flash Lite 1.0では外部データを読み込めません。

Flash Lite 1.1では、1ユーザーアクションに対して1通信のみ可能ですが、読み込めるデータはswf形式かテキスト形式のみです。

Flash Lite 2.0でも同様に、1ユーザーアクションに対して1通信のみ可能ですが、swf、テキストに加え、画像ファイルやXMLの読み込みが可能となりました。

Flash Lite 3.0では、上記通信をユーザーアクション無しでも読み込みが可能になったため、かなりPC版Flashと近いコンテンツ作成が可能となりましたが、まだ搭載機種のシェアが低すぎるため、これを当たり前のように制作者が使えるのは数年後になりそうです・・・。

では、現在一般的に使用されているFlash Lite 1.1で動的に画像やテキストを変えるにはどうすればいいのかというと、 テンプレートとなるswfを1つ用意し、サーバー上で画像やテキストの差し替えを行い、再びswfをコンパイルするといった方法が多いかと思います。興味のある方は、swfmill等で調べてみてください。

4. 配列が使用できない

Flash Lite 1.1では配列が使用できません。(※2.0からは使用可能)

Adobe LIVEDOCSでも公開されていますが、eval関数を使用してストリング処理によって配列をシミュレートする方法が多く用いられます。

 例)

eval(“array_”+i) = 1

#=> array_0 = 1

eval(“array_”+i+”_”+j) = 2

#=> array_0_0 = 2 


5. functionが使用できない

Flash Lite 1.1ではfunctionが使用できません。(※2.0からは使用可能)

こちらはフレームアクションをcall()関数で呼び出すことで代用可能です。ただし、引数・戻り値は使えません。。

具体的には、フレームアクションを記載してあるフレームにラベル名をつけ、call(“ラベル名”)で呼び出しを行うだけです。

6. enterFrameが使用できない

Flash Lite 1.1ではenterFrameが使用できません。 (※2.0からは使用可能)

こちらは、enterFrameとして使用するMCを1つ用意しておき、そのMC内で1フレーム目に実行したいスクリプト、2フレーム目に「gotoAndPlay(1);」と記載することでenterFrameに近い形で実現することができます。

上記以外にも細かな制限事項があり、実際に開発を始めてみると、インスタンスの呼び出し方法やボタンフォーカスの制御等で悩むこともあるかと思います。

その点については、また次の機会に書いてみたいと思います。

apxsを使ってapacheのモジュールを追加してみよう。

0

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

こんにちは。タジです。

今回はapacheに関するお話です。

以前、apacheを設定し、-t オプションでSyntaxをチェックした時、mod_rewriteやmod_accessがないですと怒られてしまいました。

ちなみに、mod_rewriteはapacheのrewiteを使うのに、mod_accessはOrder Allow,Denyなどでアクセス制御を使うのに必要なモジュールで、モジュールがない状態でこれらを使用する設定がhttpd.confに書かれていると、apacheが立上がらなくなってしまいます。

apacheでモジュールが足りない場合は、再コンパイル(configureからmake、make installを実施)でやることが多いですが、すでにシステムが動いているサーバやphpの複雑なモジュールが入っている場合など、後から再コンパイルするのは怖い場合があります。

そんな時には、apacheに付随しているapxsを使ってモジュールを読み込んでみましょう。

まず、どんな場合でも後からモジュールが追加できるわけではなく、apacheで使用可能なモジュールを確認した際、http_core.cとmod_so.cの二つが読み込まれている必要があります。

この二つはapacheをインストールする際にデフォルトで入るものですが、configureオプションで外すことも可能ですので、一応確認してみましょう。

/usr/local/apache2以下にapacheがある場合、

/usr/local/apache2/bin/apachectl -l

上のコマンドを叩いて、必要な二つが見つかればOKです。

ない場合は、apacheに後からモジュールを追加することを許可していないということですので、残念ながら再コンパイルするしかありません。

次に、読み込みたいモジュールのソースファイルが存在する必要があります。

apacheのソースを落としてきた場所で、追加したいモジュールのソースを探しましょう。

apache2系列では、/usr/local/srcにapacheのソースがある場合は

/usr/local/src/httpd-2.2.11/modules/mappers/

というディレクトリの下にあるはずです。

追加したいモジュールのソースが見つかったら、上記ディレクトリ内で以下のコマンドを使用します。

/usr/local/apache2/bin/apxs -c -i -a ./mod_rewrite.c

-cオプションはコンパイル、-iオプションはインストール、-aオプションはhttpd.confにLoadModuleディレクティブを追加する、という意味になります。

後はapacheを再起動すれば設定が読み込まれますので、再起動後に再度設定を行い、Syntaxチェックをした際にモジュールがないというエラーが出なければOKです。

今回はここまでです。

それではまた次回。

MacPortsでインストールしたものを最新版にアップデートする方法

0

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

こんにちは、たろちゃんです。

MacOSXではUnix由来のツールが最初から利用できますが、新しいコマンドやサーバを使いたい時などは自分でインストールをするか、パッケージ管理システムを使う必要があります。僕は元々Finkを使っていたのですが、カスタマイズされたパッケージを使いたいという事から、MacPortsを使うようになりました。

さて、FinkにしてもMacPortsにしてもインストールしたパッケージを最新版に保つ必要があります。なぜならインストール後に不具合やセキュリティホールなどが見つかった場合などにアップデートが必須だからです。

今回はMacPortsを例にとって最新版にアップデートする方法を紹介します。

まずは、MacPorts自身のアップデートを行います。

$ sudo port selfupdate
Password:

MacPorts base version 1.710 installed
Downloaded MacPorts base version 1.710

The MacPorts installation is not outdated so it was not updated

今回はすでに最新版になっていたようですので、MacPorts自身のアップデートは行われませんでした。しかしながら、このコマンドで sync という作業が実行されており、Portsのツリーが更新されます。

次に、アップデートが必要なパッケージがあるかを確認します。

$ port outdated
The following installed ports are outdated:
automake                       1.10.2_0 < 1.11_0         
git-core                       1.6.2.4_0 < 1.6.3.1_0     
glib2                          2.20.1_0 < 2.20.1_1       
gsed                           4.1.5_4 < 4.2_0           
ImageMagick                    6.5.1-0_0 < 6.5.2-4_1     
libtheora                      1.0_0 < 1.0_0             
mysql5                         5.0.77_2 < 5.0.81_0       
pcre                           7.8_3 < 7.9_0             
rsync                          3.0.5_0 < 3.0.6_0         
sqlite3                        3.6.13_0 < 3.6.14.1_0     
subversion                     1.6.1_0 < 1.6.2_0         
subversion-perlbindings        1.6.1_0 < 1.6.2_0         
vim                            7.2.160_0 < 7.2.182_0     

ここではautomakeやgit-coreなどが古いパッケージという事になります。

通常のアップデートでは一つもしくは複数のパッケージを選択して行います。

$ sudo port upgrade automake git-core

ですが、以下のコマンドで古いパッケージを一括してアップデートを行う事ができます。

$ sudo port upgrade outdated
Password
--->  Fetching automake
--->  Attempting to fetch automake-1.11.tar.bz2 from ftp://ftp.dti.ad.jp/pub/GNU/automake
--->  Verifying checksum(s) for automake
--->  Extracting automake
--->  Configuring automake
--->  Building automake
--->  Staging automake into destroot
--->  Deactivating automake @1.10.2_0
--->  Installing automake @1.11_0
--->  Activating automake @1.11_0
--->  Cleaning automake
--->  Fetching rsync
...

なお、インストール時に設定したオプションは引き継がれますので、安心してアップデートを行う事ができます。

Ruby On Rails Rich Text Editor YUI EDITOR

0

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

どもrick No.13です。

今回は、YUI EDITORと呼ばれるPluginで、
ユーザが、htmlなどを知らなくても簡単に文字を装飾できたりします。

install

$ruby script/plugin install git://github.com/larsklevan/yui_editor.git

これでinstallできない場合は、

http://github.com/larsklevan/yui_editor/tree/master

ここからdownloadしてvendar/pluginに解凍

設定

downloadしてきたフォルダ
自分の場合は、vendor/plugins/larsklevan-yu-_editor/yui_editor.yml.tpi

$mv yui_editor.yml.tpi yui_editor.yml

にリネームしてconfig/にコピーする

config/yui_editor.yml

javascript_base_uri: //yui.yahooapis.com

javascript_base_uri; http://yui.yahooapis.com

YUI EDITORを使用したいcontroller

class …. < ApplicationControler
uses_yui_editor
end

header

<head>
&;t%= include_yui_editor_if_used %>
</head>

form

<%= f.text_area column, :class => “rch_text_editor” %>

view

viewにこれかくとscriptが無効になるが色がつかなくなる

<%= sanitize @test.body %>

YUI EDITORの表示を変えたいときは、
config/yui_editor.ymlを編集すればよい

以上。

Ruby On Rails コンボボックスなどの動的な動き observe_field

0

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

どもrick No.12です。

今回は、このプルダウンを選んだらこっちのプルダウンの値が変わる!!
なんてことをしたいときにobserve_fieldを使用します。
observe_fieldは、railsのRJSテンプレートという機能を使っています。
RJSテンプレートは、javascriptを書かなくても簡単にかける機能って感じですかね。

view側(プルダウンを監視してプルダウンを更新する)

<%= select(“keyword”, “category”, Test.collect{i.title, i.id}) %> //監視されるプルダウン
<%= observe_field(“keyword_category” //この値を見る(上のソース)
:update => “keyword_small_category”, //この値の場所を更新する
:submit => “keyword”,
:url => {:action => “small_category”} //このaction名のメソッドを呼び出すと同時にsmall_category.html.erbを読み込む、[:action => “aa”, :id => params[:id]]なども可能
:width => “value” //keyword_categoryのidをvalueで渡す
) %>
<%= select(“keyword”, “small_category”, Test.collect{i.title, i.id}) %> //更新されるプルダウン

small_category.html.erb

<%= options_for_select Test.ccollect{i.title, i.id} %>
//更新後のプルダウンの値

controller側

def small_category
render :layout => false
end

view(プルダウンを監視してなにか呼び出す)

更新されるプルダウンだったところを

<div id=”small_category”></div>

とする。
そうするとsmall_category.js.erbが呼び出される。そこに表示したいものを書けばよい。
以上。

CSSハック〜IE8編

0

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

そろそろIE6が世の中から消えてもいいと思うmaiです。
ほんと…IE6がなくなるだけでもだいぶ色々楽になるのに。

IE6がまだまだ現役の中、IE8が登場してきました。
beta版の頃は一部のマニアックな人だけだから!とか言ってられたんですが、
正式版になってしまったのでいつまでも対象外にはしていられません。

というわけで、IE8にだけ適用するハックを調べてみました。
実はまだ実践してないのでメモですが…

間違っていたので修正しました。今度こそ多分…(2009/6/3)

head~/* */body セレクタ{ /* for ie8 */ プロパティ:値; }
html:not(:target) セレクタ{ /* for others */ プロパティ:値; }

 これがファイナルアンサーっぽいカンジです。
参考にしたサイトはこちら↓

http://lpclips.net/2008/06/css-hack.html

最近人気な記事