ホーム ブログ ページ 66

apacheの構文チェックをしよう。

0

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

こんにちは、タジです。

今回はapacheの構文チェックについてです。

 apacheを起動しようとしたらSyntax Errorが出て起動しない・・・なんて経験はないでしょうか。

自宅サーバやテストサーバならまだ良いですが、そうでなければ大変なことになります。

Syntax Errorは、Configファイルの文法や構文が間違っているため読み込めない、というエラーです。

つまりこれを事前に確認できれば良いわけですね!

apacheの構文チェックは起動スクリプトにオプションをつけるだけです。

/usr/localの下にapache2が入っている場合は

/usr/local/apache2/bin/apachectl -t

と打てば構文チェックができます。

 また、/etc/init.d/ の下にシンボリックリンクが貼られている場合は、

/etc/init.d/apache2 -t

という感じでもOKです。

apacheのConfigファイルはhttpd.confというファイルなので、これを書き換えたときは必ずチェックするようにしましょう。

 では、また次回。

railsの開発用サーバを使ってみよう。

0

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

こんにちは、タジです。

今回はrailsに用意された開発中のアプリケーションを実際に動かすためのスクリプトである、script/serverについてです。

 このスクリプトを使うと非常に簡単にアプリの動作を確認できます。また、Webサーバも立ち上げてくれるので、ブラウザからも確認ができます。

起動も簡単で、起動したいプロジェクトのディレクトリで

ruby script/server

と打つだけです。

特に何も設定していない場合は、railsに付属しているWebサーバであるWEBrickを起動します。

起動後は、

http:localhost:3000

にアクセスすることで、ブラウザから動作確認ができます。

3000というのは使用するポート番号で、これを変更すれば複数立ち上げることもできます。

ruby script/server –port=3001

と打てばlocalhostの3001番で起動するという感じです。

今回はここまでです。

それではまた次回。

macユーザーのための便利なエクセル(excel 2004)ショートカット集

0

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

こんにちはカツオです。 今日は自分が会社に入ってから覚えた ショートカット (for mac)を書こうと思います。

役に立つと思う順に書きますね。   

コピー  
command + c

切り取り  
command + x

貼付け  
command + v

エクセルの書式設定ダイアログを開く
command + 1   

セル内で改行  
command + option +enter

選択しているセルを再編集  
control + u

セルの削除  
control + k

セルの追加  
control + i

選択しているセルの数値と値の削除

control + b

選択セル位置と同じ列で直前の値をコピーして入力  
control + d

選択セル位置と同じ行で直前の値をコピーして入力  
control + r

選択セル位置の列をすべて選択
control + スペース

選択セル位置の行をすべて選択  
shift + スペース

保存
command + s

名前を付けて保存   
command + shift + s    

現在の日付   
control+;(セミコロン)

現在の時刻
control + :(コロン)   

左揃え
command + L    

中央揃え
command + E    

右揃え
command + R    
   
macユーザーは エクセルでセル内改行とか絶対つまづきますよね。
あとセルで再編集はとても便利ですね。   
また覚えたら追加していきますね。 ではでは  

rakeをバージョン指定して実行してみる~undefined method `last’ for {}:Hash~

0

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

ローカル環境で rake db:migrate をしようとしたら
rake aborted! undefined method `last’ for {}:Hash残念でたまりません。

ググってみると
rake db:migrate すると undefined method `last’ for {}:Hash と出る
↑では新しいバージョンを削除することでエラーを解消しています。

とりあえず今回は、rakeのバージョンを指定して実行してみようと思います。

rake _0.7.3_ db:migrate
これでOKのようです。

partialについて

0

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

どうも。

昨日に続いて、バッチです。

本日はpartialについて簡単に説明します。

partialは部分的に別のファイルを挿入することができます。

前回のlayoutに続いて、メニューやヘッダーフッターに使用する ことが多いと思います。

使い方は、まずpartialファイルを作ります。 ファイル名は少し特殊で、

_hoge.rhtm

というようにファイル名の最初にアンダースコアがつきます。

作ったpartialファイルを挿入するには、

<% render :partial => “hoge” %>

と書きます。

この部分にpartialファイルの中身が挿入されるわけです。

編集する機会が多かったりする部分は、partialでまとめておくと

一気に変更できますね。 

Railsのlayoutファイルについて

0

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

どうも。

新人のバッチです。

本日はRailsのlayoutファイルについて簡単に説明します。

RailsでlayoutとはHTMLでいうフレームみたいなもので、

同じデザインをいくつものファイルで共有する際に用います。

layoutファイルはviewフォルダ内のlayoutsフォルダに置きます。

使用するにはcontrollerの最初に、使用するlayoutファイルを記述します。

 layout ‘hoge’

また、一つのファイルのみに適用する場合は、

 layout ‘hoge’ :only => :アクション名

適用しないファイルを定める場合は、

 layout ‘hoge’ :except => :アクション名

で設定できます。

設定ができたらlayoutファイル内の、

 <%= yield %>

と書かれている部分に各アクションの内容が挿入されます。

linux locateコマンドについて

0

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

今日はlocateコマンドについて

簡単に説明します。 

ファイルを検索したいけど findじゃ時間がかかるし、

重たいって時に locateコマンドが役に立ちます。

locateコマンドでは

ファイル名やディレクトリ名から、

あらかじめ作成してあるデータベースから パスを高速検索することができます。

$ locate ファイル名(ディレクトリ名等)

で一瞬でパスが検索できます。

しかし、もしファイルを検索して

warning: locate: warning: database /var/lib/slocate/slocate.db’ is more than 8 days old

等とwarningがでてしまったら、

それはDBの更新が8日以上してないってことなのです。

その場合、DBの更新が必要です。

DBの更新のコマンドは

$updatedb

で対応できます。

たくさんファイルとかディレクトリとかじゃんじゃん探しちゃってください。

Rubyの例外処理

0

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

どーもメガネです。7回目です。今回はRubyの例外処理について説明します。
例外とはプログラムの実行中にエラーが発生すると例外が発生します。例外が発生するとプログラムの実行は中断し例外を探します。
要するに、何か問題が発生した場合に“エラー”ではなく、“エラーみたいですよ”と報告し、その報告を受け取って何かしらの処置をするのが「例外処理」です。で、ここでいう“報告”が「例外」で、“報告する行為”を“「例外」を投げる”といいます。

簡単に書くと

1,例外処理を使わない処理  
if a() == false  
    エラー処理        
end               
if b() == false   
    エラー処理
end
if c() == false
    エラー処理
end

2,例外処理を使った処理
begin
    a()
    b()
    c()
rescue
    エラー処理
end

これで例外処理が便利だということが分かったと思います。

ではさっそく書き方を説明します。

begin
    例外が起こる可能性のある処理
rescue
    例外が起こった場合の処理
end

またrescueのあとに変数名を指定することで例外オブジェクトを得ることができます。

begin
    例外が起こる可能性のある処理
rescue => 例外オブジェクトが代入される変数
    例外が起こった場合の処理
end

ほかの言語を知っている方であればtry~catchと使い方は変わりません。
以上です。

Rubyでどう書く?:RubyCocoa+Core Animationでお手軽アニメーション

0

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

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

Rubyでどう書く?:RubyCocoa+Core Animationでお手軽アニメーション 佐藤伸吾(KBMJ)

今回はRubyCocoaとMac OS XのフレームワークであるCore Animationを使って、お手軽にアニメーションを作成してみましょう。

問題

RubyCocoaは、Mac OS XのCocoaオブジェクトをRubyスクリプトからRubyオブジェクトとして扱うための、Ruby用ライブラリとフレームワークです。RubyCocoaを用いれば、RubyでCocoaアプリケーションを記述することができるのです。

 Core AnimationはMax OS Xのフレームワークで、その利点は手軽さにあります。普通にアニメーションプログラミングを行おうとすると、時間軸管理、非同期な描画スレッド、パフォーマンスの向上など、考慮すべき点があまりにも多すぎます。

 しかし、Core Animationを用いれば、面倒な部分はOSに任せて、自分の実現したいことに集中できるのです。

 今回はRubyCocoaとMac OS XのフレームワークであるCore Animationを使って、お手軽にアニメーションを作成してみましょう。

回答例

 AppController.rbを作成し、以下のように記述します。

require ‘osx/cocoa’
OSX.require_framework ‘QuartzCore’

class AppController < OSX::NSObject
ib_outlet :window
ib_outlet :view
ib_action :pressPosition
ib_action :pressRotation
ib_action :pressSepia
ib_action :pressBloom
ib_action :pressHole
ib_action :pressZoom
ib_action :pressHalftone

def awakeFromNib
bitmapImage = OSX::NSBitmapImageRep.imageRepWithContentsOfFile_(‘/Users/ssato/Pictures/ruby.png’)
image = bitmapImage.CGImage()

layer = OSX::CALayer.layer()
layer.contents = image
layer.frame = OSX::CGRectMake(0,0,995/4,996/4)

black=OSX::CGColorCreateGenericRGB(0,0, 0,1.0)
backgroundLayer=OSX::CALayer.layer()
backgroundLayer.backgroundColor=black

backgroundLayer.addSublayer_(layer)

@view.setLayer_(backgroundLayer)
@view.setWantsLayer_(true)
end
def pressPosition(sender)
animation = OSX::CABasicAnimation.animationWithKeyPath_(‘position’)
animation.duration = 1.0

layer = @view.layer.sublayers.objectAtIndex_(0)
position = layer.position
animation.fromValue = OSX::NSValue.valueWithPoint_(OSX::NSPointFromCGPoint(position))
position.x += 256;
position.y += 160;
animation.toValue = OSX::NSValue.valueWithPoint_(OSX::NSPointFromCGPoint(position))
animation.autoreverses = true
animation.repeatCount = 4
layer.addAnimation_forKey_(animation, ‘positionAnimation’)
end
def pressRotation(sender)
animation = OSX::CABasicAnimation.animationWithKeyPath_(‘transform’)
animation.duration = 0.5
animation.autoreverses = true
animation.repeatCount = 4
transform = OSX::CATransform3DIdentity
animation.fromValue = OSX::NSValue.valueWithCATransform3D(transform)
transform = OSX::CATransform3DMakeRotation(Math::PI, 0, 1.0, 0)
transform.m34 = 1.0 / -420.0
animation.toValue = OSX::NSValue.valueWithCATransform3D(transform)
layer = @view.layer.sublayers.objectAtIndex_(0)
layer.addAnimation_forKey_(animation, ‘transformAnimation’)
end
def pressSepia(sender)
filter = OSX::CIFilter.filterWithName_(‘CISepiaTone’)
filter.setDefaults()
layer = @view.layer.sublayers.objectAtIndex_(0)
layer.name = ‘sepiaFilter’
layer.setFilters_(OSX::NSArray.arrayWithObject_(filter))
end
def pressBloom(sender)
filter2 = OSX::CIFilter.filterWithName_(‘CIBloom’)
filter2.setDefaults
filter2.setValue_forKey_(OSX::NSNumber.numberWithFloat_(0.0), ‘inputIntensity’)
filter2.setValue_forKey_(OSX::NSNumber.numberWithFloat_(5.0), ‘inputRadius’)
filter2.setName_(‘bloomFilter’)

layer = @view.layer.sublayers.objectAtIndex_(0)
layer.setFilters_(OSX::NSArray.arrayWithObject_(filter2))

pluseAnimation = OSX::CABasicAnimation.animation
pluseAnimation.keyPath = ‘filters.bloomFilter.inputIntensity’
pluseAnimation.fromValue = OSX::NSNumber.numberWithFloat_(0.0)
pluseAnimation.toValue = OSX::NSNumber.numberWithFloat_(1.5*2)
pluseAnimation.duration = 1.0
pluseAnimation.repeatCount = 4
pluseAnimation.autoreverses = true
layer.addAnimation_forKey_(pluseAnimation, ‘bloom’)
end
def pressHole(sender)
filter = OSX::CIFilter.filterWithName_(‘CIHoleDistortion’)
filter.setDefaults()
layer = @view.layer.sublayers.objectAtIndex_(0)
layer.setFilters_(OSX::NSArray.arrayWithObject_(filter))
end
def pressZoom(sender)
filter = OSX::CIFilter.filterWithName_(‘CIZoomBlur’)
filter.setDefaults()
layer = @view.layer.sublayers.objectAtIndex_(0)
layer.setFilters_(OSX::NSArray.arrayWithObject_(filter))
end
def pressHalftone(sender)
filter = OSX::CIFilter.filterWithName_(‘CICMYKHalftone’)
filter.setDefaults()
layer = @view.layer.sublayers.objectAtIndex_(0)
layer.setFilters_(OSX::NSArray.arrayWithObject_(filter))
end
end

Interface Builderで画像1のようにコンポーネントを配置します。

画像1

画像1

NSObjectを追加して、ClassにAppcontrollerを指定します(画像2)。

画像2

画像2

OutletsとActionsのConnectionを画像3のように設定します。

画像3

画像3

実行結果

Positionボタンを押すと、画像が斜めに移動します(画像4)。

画像4

画像4

Rotationボタンを押すと画像が回転し、Sepiaをクリックすると画像がセピア色になります(画像5)。

画像5

画像5

同様に、Bloomは画像が光り輝き(画像6)、Holeは画像に穴が空きます(画像7)。Zoomボタンはズームエフェクト(画像8)で、Halftoneはハーフトーンフィルタです(画像9)。

画像6

画像6

画像7

画像7

画像9

画像8

画像9

画像9

解説

共通部分

Core Animationを使用するためにフレームワークを設定します。

OSX.require_framework ‘QuartzCore’

AppControllerからviewにアクセスするためのアウトレットを宣言します。

ib_outlet :view

ib_action :pressPosition
ib_action :pressRotation
ib_action :pressSepia
ib_action :pressBloom
ib_action :pressHole
ib_action :pressZoom
ib_action :pressHalftone

pressPosition部分

アクションを宣言し、ボタンが押された時の処理として登録できるようにします。

layerオブジェクトを作成します。Core Animationではレイヤーを基本単位としてアニメーションを実行します。

layer = OSX::CALayer.layer()

backgroundLayerの下にlayerをぶら下げます。

backgroundLayer=OSX::CALayer.layer()
backgroundLayer.addSublayer_(layer)

viewの描画内容としてbackgroundLayerを設定する。

@view.setLayer_(backgroundLayer)
@view.setWantsLayer_(true)

アニメーション化するレイヤプロパティのキーパスを指定して、CABasicAnimationのインスタンスを作成します。

animation = OSX::CABasicAnimation.animationWithKeyPath_(‘position’)

再生時間を1秒に設定します。

animation.duration = 1.0

アニメーションの開始位置を指定します。

animation.fromValue = OSX::NSValue.valueWithPoint_(OSX::NSPointFromCGPoint(position))

アニメーションの終了位置を指定します。

position.x += 256;
position.y += 160;
animation.toValue = OSX::NSValue.valueWithPoint_(OSX::NSPointFromCGPoint(position))

繰り返しアニメーションされるように設定します。

animation.autoreverses = true
animation.repeatCount = 4

layerにアニメーションを設定します。

layer.addAnimation_forKey_(animation, ‘positionAnimation’)

pressRotation部分

単位行列を取得します。

transform = OSX::CATransform3DIdentity

アニメーション開始時の変換行列を設定します。

animation.fromValue = OSX::NSValue.valueWithCATransform3D(transform)
animation.fromValue = OSX::NSValue.valueWithCATransform3D(transform)

回転行列を取得します。

transform = OSX::CATransform3DMakeRotation(Math::PI, 0, 1.0, 0)

 pressSepia部分

セピア調フィルタを作成する。

filter = OSX::CIFilter.filterWithName_(‘CISepiaTone’)

フィルタの入力値をデフォルト値に初期化する。

filter.setDefaults()

layerにfilterを設定する。

layer.setFilters_(OSX::NSArray.arrayWithObject_(filter))

pressBloom部分

Bloomフィルタを作成する。このフィルタはエッジをソフト化し、輝きを画像に適用します。

filter2 = OSX::CIFilter.filterWithName_(‘CIBloom’)

フィルタ出力とオリジナル画像の線形のブレンドを指定するスカラー値であるinputIntensityを0.0に設定する。

filter2.setValue_forKey_(OSX::NSNumber.numberWithFloat_(0.0), ‘inputIntensity’)

フィルタ処理の対象となる領域の半径を指定する値であるinputRadiusを5.0に設定する。

filter2.setValue_forKey_(OSX::NSNumber.numberWithFloat_(5.0), ‘inputRadius’)

フィルタに名前を設定する。この名前は後でアニメーション設定する時に必要となる。

filter2.setName_(‘bloomFilter’)

アニメーション化する属性を指定する。

pluseAnimation.keyPath = ‘filters.bloomFilter.inputIntensity’

inputIntensityの開始値と終了値を指定する。

pluseAnimation.fromValue = OSX::NSNumber.numberWithFloat_(0.0)
pluseAnimation.toValue = OSX::NSNumber.numberWithFloat_(1.5*2)

pressHole部分

穴歪みフィルタを作成する。

filter = OSX::CIFilter.filterWithName_(‘CIHoleDistortion’)

pressZoom部分

カメラをズームしたようなエフェクトをシミュレートするズームブラーを作成する。

filter = OSX::CIFilter.filterWithName_(‘CIZoomBlur’)

pressHalftone部分

ハーフトーン表現を行うフィルタを作成する。

filter = OSX::CIFilter.filterWithName_(‘CICMYKHalftone’)

最後に

駆け足で説明しましたが、いかがだったでしょうか?RubyCocoaを使うと、RubyからMac OS Xのリッチなフレームワークを使うことができます。

もっと良い方法があれば、コメントやbuilderブログなどで是非教えていただきたいと思います。

ntpをインストールする

0

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

こんにちはmugiです。

今回はCentOS5.2にntpをインストールします。 

ntpのインストール 

# yum -y install ntp

ntpの設定

# vi /etc/ntp.conf

ファイル内に「server *.*.*.*.*」のような記述があるかと思いますので、そこに同期させたいntpサーバを記述します。保存して閉じます。

時刻合わせ(ntpdは同期をとるサーバとあまりにも時刻がずれていると同期がとれないことがあるため) 

# ntpdate server *.*.*.*.*

起動

# /etc/init.d/ntpd start 

自動起動をONにする

# chkconfig ntpd on

サーバが起動したとき自動でntpdが起動するようになります。

同期がとれているか確認 

# ntpq -p

     remote           refid      st t when poll reach   delay   offset  jitter

==============================================================================

* server *.*.*.*.* .GPS.            *    *   *  ***    *.***  -*****.  **.***

 LOCAL(0)        .LOCL.          ** l   **   **  ***    *.***    *.***   *.***

同期したいサーバの頭に*がついていればOKです。

(表示されるまで設定して10分くらいかかるようです)

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のリダイレクトの場合は注意しましょう。

最近人気な記事