Sep 08

nginx(えんじんえっくす)使ってみた。

この辺りに設定例が転がっているね。
Using Nginx As Reverse-Proxy Server On High-Loaded Sites

設定例:
# 動作確認していないけれどこんな感じ。
# 時間が出来たら同じ設定での動作確認しておきます。

worker_processes  4;
worker_cpu_affinity 0001 0010 0100 1000;

events {
    worker_connections  32768;
    use epoll;
}

http {
    include proxy.conf;
    include mime.types;

    # JavaServlet
    upstream tomcat{
        server 192.168.1.21:8080 wight=5;
        server 192.168.1.22:8080 wight=5;
    }

    server {
        listen    redhawk.jp:80 default;

        location /javaservlet {
            proxy_pass http://tomcat/javaservlet;
        }
    }
}

実際使ってみたんだけれど、proxy serverとしての機能部分しか使わないので
apache使うよりも負荷は軽い。

使い方は、tomcatを起動して
その後に、locationなり、サブドメインなりで判定して、tomcatにリクエストを投げてあげるだけ。

プロセスに HUP を投げると、設定ファイルを再読み込みするので、再起動の必要もない。
# HUPはバグがあるから多用しない方がいい。と職場の人が言っておりましたが。

upstream 設定を使うと、weight を設定して、ロードバランサーの機能を持たせる事も出来るので
Django や、 Passenger との連携も出来るらしいので、Java, Python, Ruby を使う時には便利だと思う。

PHP は、まあ、どうでもいいです。
fastCGIで使ってみたけれど、処理負荷が高すぎて、アクセスが本当に多いサイトだと持たない。
nginxというより、PHPの問題だし。
それに、fastCGI使うくらいなら、apache module で動かした方が設定も楽だしで PHP メインなら、nginx は不要かと。

Tagged with:
Aug 31

JPAで
@OneToOne
@JoinColumn
を使って、JOINを張ったら、そのモデルを使って INSERT文を走らせる時に、specified twice っていうエラーが出るようになった。
SQLを見てみると、確かに同じColumnを二回指定している。

http://72.5.124.55/javaee/5/docs/api/javax/persistence/JoinColumn.html

ここを見ると、
@JoinColumn(insertable = false)
というのがあるので、それを指定したら解決。

updatable

public abstract boolean updatable
(Optional) Whether the column is included in SQL UPDATE statements generated by the persistence provider.
Default:
true

ってあるように、Modelの中身を更新すると、勝手に UPDATE文が走るので、それが嫌な人は false にしておこう。

このオプションは
@Column
にもあるので、別にJOIN限定の処理ではない。

JPAはアノテーションをモデルにいくつくっつけるかの設定次第だなぁ

Djangoも結局、キーワード引数でいくつオプション付けるか。
っていう部分は当然あるし。
まあ、そうなるよなーって思う。
そう思うから、Annotation で Model いじればなんとかなるんじゃね?って思って調べるきっかけになるし。

JPAでこれだけ色々やれるってなると、本気のHIBERNATEを使ってみたくなるなぁ
どんだけ凄いんだろう。

Tagged with:
Aug 27

Struts2 でアプリを作っていて、Interceptor を使おうとしたら、めちゃはまった・・・

public class AuthenticationInterceptor extends AbstractInterceptor {

	private static final long serialVersionUID = 1L;

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		Map<String, Object> session = ActionContext.getContext().getSession();
		Boolean auth = (Boolean)session.get(AuthenticationAction.AUTH_KEY);
		if (null == auth || !auth.booleanValue()) {
			return "auth-error";
		} else {
			// 次のインターセプター処理
			return invocation.invoke();
		}
	}

}

というのが正解のソースコード。

じゃあ、何がダメなやつはどこがおかしかったのかと言うと
この Interceptor 独自の戻り値を struts.xml で定義した、global-results の値にマッチングさせたい時
次のインターセプター処理を呼び出してはいけない!!
って事ですな・・・

インターセプターが戻り値を持っている時点でもっと早く気がつけよ。って気がしないでもないです。はい。

ちなみに、 struts.xml はこんな感じ。




  
  

    
      
      
        
        
      
    
    
    
    
      auth/login
    
    
      /WEB-INF/pages/admin/index.jsp
      auth/login
    
  

    
      admin/index
      /WEB-INF/pages/auth/login.jsp
    
  

Tagged with:
Aug 17

一つのアプリで複数のデータベースにアクセス。

それぞれの環境に対して、多くの接続を定義できます。それぞれの接続は同じ名前でラベル付けされたスキーマを参照します。デフォルトで使われる接続名は propelでこれはリスト8-3のpropelスキーマを参照します。nameオプションによって別の接続を作成することができます:

php symfony –name=main configure:database “mysql://login:passwd@localhost/blog”

Tagged with:
Aug 17

redirect での引数の型が違う

これも若干はまりどころですが、redirectする際、’module/action’と文字列で’/'で区切って記述しますが、routingを利用して引数も渡したい場合、素直に書くと’foo/bar/variable’となります。
しかしこのように正直に書いても’variable’が絶ち落とされてしまいます。
この場合はどうするかというと、まずrouting.ymlで下記のように書いてあるものとして、

foo_bar_hoge:
url: /foo/bar/:hoge
param: { module: home, action: bar }
次に、redirectメソッドの引数は素直に書くのではなく、配列で渡します。
$this->redirect(array(‘module’ => ‘foo’, ‘action’ => ‘bar’, ‘hoge’ => ‘variable’));
これで正しくリダイレクトされ、引数も渡されます。

Tagged with:
Aug 17

security.yml

ファイルで、 indexアクションなら

index:
is_secure: on
にするだけ。
後は、アクションの中で
$user = $this->getUser()
$user->setAuthenticated(true);

とすれば、そのページを表示できる。
細かいRoleの設定は

$user->addCredential(‘god’);
$user->addCredentials(‘god’, ’slave’);

Tagged with:
May 07

CentOS5.2 でPHPなフレームワークsymfonyを使う機会があったのでメモ。

必要なパッケージをインストール
yum install php php-xml

php-xml を入れないと、後で「symfony/symfony requires PHP extension “dom”」というエラーが出る。

次に、PEARにsymfonyして、PEARからインストール。

pear channel-discover pear.symfony-project.com
pear install symfony/symfony-1.1.7

# CentOS5.2だとPHPのバージョンが古くて1.7系しか入れられない。

ちなみに、Debian/Ubuntuでは、 apt-getで入れられるらしい。

deb http://www.symfony-project.org/get debian/
apt-get update
apt-get install php5-symfony

後は、プロジェクトを作って、アプリケーションを組み込んでいく感じ。
Djangoに微妙に似ているんだよねぇ
まあ、似ているから選んだんだけれどw

Tagged with:
Mar 08

自宅のサーバマシンでここ運用してるんだけれど、どうにもこうにも、MovableTypeはコメント投稿した時に重過ぎる!!
何でかっていうと、一々毎回静的なページを生成しているからだ。生成後はアクセスが早いんだけれど、いまどきPHPで動的に生成していてもそれ程遅くはないだろう。
ってか、一度 WordPress に移行したんだけれど、リンクが全部消えちゃうから、諦めたんだよね。
mod_rewriteで条件で飛ばせるほど、URLパターンがはまるわけじゃないし・・・う~ん、リンク切れ覚悟で移行するか、サーバマシンのスペックを上げるかだね。
Athron64の1.8GHzくらいしかなかった気がする。一応、デュアルコアだったかもしれないけれど。
タグ検索とかも凄い重いから、使いづらいんだよねー
サーバマシンのスペックを上げても、それ程期待は出来なさそうな気がするし、またどうせ直ぐに限界点が見えてくると思う。
CGIで動かしているのも原因の一つなんだろうなぁ
PHPはApache Moduleで動かすし、WordPressが早いのもそこにある。
mod_perlで動かす手もあるのかもしれないが、mod_perlは余り使いたくないな。
分かっているんだよ!! WordPressの方が良いっていうのは!!
っち、休日中にやるか。まだ土曜日だ。がんばれば、一時間以内に作業は終わる。
タグとかカテゴリの整理とか、リダイレクト処理とかは・・・もう、後でやるよ!!
そして、そう・・・日曜朝は首都高をバイクで走りたいんだ!!
だから、徹夜でサーバのメンテしていて、そのまま首都高走るとか避けたいんだよ!!
ちなみに、なんか、WordPressはコメントとトラックバックの区別が初期状態ではなかった気がする。
なんか、色々入れないといけなかったような。
っけ めんどくせー だるいよー 誰かやってよー

 

# 追記
結局 WordPress に移行。
前のページへのリンクはとりあえず残してあるけれど、落ち着いたら消そうかな。
しかし、MovableTypeに比べて、格段に軽いお!!

Tagged with:
preload preload preload