2013年9月27日金曜日

Play Frameworkでのルーティング設定

Play Frameworkでページャーを実装したい場合ですが、このようにルーティングを設定します。



GET     /detail/:categoryId/:id                           controllers.ItemDetail.index(categoryId:Long, id:Long, page: Integer ?= 1)
routesにルーティングの設定を書きますが、その際に変数のデフォルト値を設定することが出来ます。例えば引数のpageが未指定だった場合にはページ番号1として内部の処理が行われます。

例えばテンプレート内で生成されたURLが

https://github.com/YoshiteruIwasaki/NegativePositieAnalyzerForJa/blob/master/app/views/category.scala.html

<a class="btn btn-default" href="detail/@{category.categoryId}/@{bean.getItem.itemId}">
で生成されているような
/detail/1/2
のようになった場合にはPlay Frameworkの内部では以下のように変換がされます。
/detail/1/2?page=1

Controller側ではどのように受け取られるかといいますと、
https://github.com/YoshiteruIwasaki/NegativePositieAnalyzerForJa/blob/master/app/controllers/ItemDetail.java

public static Result index(Long categoryId, Long itemId, Integer page) {
のような引数にそれぞれの値がセットされるようになります。
2ページ目以降は
https://github.com/YoshiteruIwasaki/NegativePositieAnalyzerForJa/blob/master/app/views/detail.scala.html
テンプレート内で以下の様なリンクを生成することで

<a href="@routes.ItemDetail.index(bean.getItem.categoryId, bean.getItem.itemId, currentPage - 1)">

/detail/1/2?page=2
のURLが生成されるようになります。

/detail/1/2/3のようにページ番号もスラッシュ区切りにするようなURLのパターンを変える方法はよくわかりませんでした。



Play Framework本番サーバへのデプロイあれこれ

アプリケーションのデプロイ作業って悩ましいですよね。 例えばDBサーバの接続情報は本番サーバと開発サーバで違っていたり、
メールサーバの接続情報もまたしかり。

Play Frameworkはこういった設定ファイルは

conf/application.conf

に設定されていて、
本番環境で設定ファイルを振り分ける方法としては、
Play起動時に設定ファイルを指定して起動する方法が紹介されています。
http://www.playframework-ja.org/documentation/2.1.3/Production

次のようにして、本番環境用の別の設定ファイルを指定することもできます:
$ target/start -Dconfig.file=/full/path/to/conf/application-prod.conf

ちなみにみなさんって本番環境とのこういった設定の振り分けってどうしてます?
デプロイスクリプトに組み込む際に、呼び出す設定ファイルを切り替える?
Jenkinsでビルドする前にsedコマンドとかで上書きしてます?

とにかくいずれの方法にしても、アプリケーション固有の設定(例えば一覧に表示する件数とかサイト名とか)なんかをapplication.conf
に書くと、開発環境用の設定ファイルと本番環境用の設定ファイル両方に書く必要が出て、まあ手間が増えるわけです。

なので私は提唱したい。
とりあえずapplication.confには共通で呼び出す値を書くようにしよう。
環境によって変わる値は外部ファイル化して環境によってそのファイルだけ切り替えるようにしよう、と。

つまりはこんなかんじにしてみてはいかがでしょうか。
https://github.com/YoshiteruIwasaki/NegativePositieAnalyzerForJa/tree/master/conf

https://github.com/YoshiteruIwasaki/NegativePositieAnalyzerForJa/blob/master/conf/application.conf
には

include "databases.conf"

のような形で呼び出す処理を書く。環境によって切り替える必要がある時にはこのファイルを上書きする。そうすることで切り替えたいところだけ切り替えることができるようになりますね。





2013年9月26日木曜日

Play Frameworkがチーム開発に向かない理由

個人的にPlay Frameworkで作っているプロジェクトではこんなようなクラス構造にしています。

https://github.com/YoshiteruIwasaki/NegativePositieAnalyzerForJa/tree/master/app

beans
components
controllers
models
services
tasks
utils
views

ちなみにこの中で基本的な構造として用意されているのは
controllers
models
views
の3つだけです。

つまり他の構造は個人の主観によって作られてしまうため、チームで開発を行う場合にはある程度のルール作りが必要になってしまいます。

Play Frameworkは個人で作るには爆速で作れると思いますが、チームで大規模な開発をするのには向いてないような印象があります。

他の人はどんなクラス構造にしているのか興味があります。








Play FrameworkでAkka schedulerがうまく動作しなかった件

Playで定期実行する処理を書くときには
にあるように簡単に書くことができます。

Akka.system().scheduler().schedule(
  Duration.create(0, TimeUnit.MILLISECONDS), //Initial delay 0 milliseconds
  Duration.create(30, TimeUnit.MINUTES),     //Frequency 30 minutes
  testActor,
  "tick",
  Akka.system().dispatcher()
);

ここにある例を参考に自分でも定期実行する処理を書いてみたのですが、どうやら上手く動いていなかった様子。

上手く動かなかったケース
Akka.system()
.scheduler()
.schedule(Duration.create(0, TimeUnit.SECONDS),
Duration.create(15, TimeUnit.MINUTES), getAnalyze,
Akka.system().dispatcher());

動くように修正したケース

Akka.system()
.scheduler()
.schedule(Duration.create(1, TimeUnit.SECONDS),
Duration.create(300, TimeUnit.SECONDS), getAnalyze,
Akka.system().dispatcher());

もともと下のパターンは動いていたので、バグなのか分単位だと動作しない仕様なのかよくわかりませんが、とりあえず動くようになりました。
Akka.system()
.scheduler()
.schedule(Duration.create(0, TimeUnit.SECONDS),
Duration.create(1, TimeUnit.HOURS), getFeed,
Akka.system().dispatcher());

2013年9月23日月曜日

さくらのVPSでPlay Frameworkを動かす:サブドメインの割り当て

それぞれ以下の様なドメインでアクセスをさせたいので、サブドメインの設定を行います。

ムームーDNSで
さくらのVPSにサブドメインを設定するを参考にサブドメインの設定を行います。
次にApacheの設定を行います。

vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:80
サブドメインなしの場合にアクセスした際の表示調整

<VirtualHost *:80>
    ServerAdmin webmaster@ドメイン
    DocumentRoot /var/www/html
    ServerName ドメイン
    ServerAlias www.ドメイン
    ErrorLog logs/ドメイン-error_log
    CustomLog logs/ドメイン-access_log common
</VirtualHost>


サブドメインの設定
vim /etc/httpd/conf.d/play.conf
<VirtualHost *:80>
  ServerAdmin webmaster@ドメイン
  DocumentRoot /var/www/html
  ServerName サブドメイン
  ErrorLog logs/サブドメイン-error_log
  CustomLog logs/サブドメイン-access_log common
  ProxyPreserveHost On
  ProxyPass  /excluded !
  ProxyPass / http://127.0.0.1:9000/
  ProxyPassReverse / http://127.0.0.1:9000/
</VirtualHost>
ちなみに最初の時点では
/var/www/html内にファイルがなくてデフォルトの画面が出てしまうので、適当なページを作っておきます。

vim /var/www/html/index.html
適当なhtmlファイル

そんなこんなで出来上がったサイトがこちらになります。
http://api.negaposia.com/



さくらのVPSでPlay Frameworkを動かす:ドメインの割り当て

さて、そろそろIPアドレスベースでのアクセスに飽きてきたので、ドメインを割り振りましょう。
ムームードメインでドメインを取得することが多いのですが、ムームーDNSを使うケースとさくらのネームサーバを使うケースといろいろ有るようです。

今はお試し期間中でさくらのネームサーバを使えないので、ムームーDNSを使って設定を行ってみます。

ムームーDNSの画面で以下のように設定をしました。

サブドメイン:空欄
種別:A
内容:さくらのVPSから割り当てられたIPアドレス

これでIPアドレスではなく、ドメインでアクセスが出来るようになります。


さくらのVPSでPlay Frameworkを動かす:Jenkinsにジョブの設定を行う

さあ、JenkinsにJobの設定を行いましょう。
今回はこのPlay Frameworkのプロジェクトをビルド・デプロイしていきます。
https://github.com/YoshiteruIwasaki/NegativePositieAnalyzerForJa
適当な名前をつけてJobを作成します。

ビルドではシェルの実行を選択してもろもろの設定を行います。
このジョブでは

  1. Playサーバの停止
  2. ビルド
  3. Playサーバの起動

を行います。

export PATH=$PATH:/usr/local/play
service play stop
sleep 10
cat << EOT > ${WORKSPACE}/conf/databases.conf
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost:3306/negaposi?useUnicode=yes&characterEncoding=utf8&connectionCollation=utf8_general_ci"
db.default.user=***
db.default.password="***"
db.default.connectionTestStatement="select 1;"
db.default.connectionTimeout=20 seconds
EOT
cat << EOF > ${WORKSPACE}/conf/secret.conf
application.secret="***"
EOF

cat << EOFF > ${WORKSPACE}/conf/evolutions.conf
evolutionplugin=disabled
EOFF

play clean compile stage
service play start

こんなかんじに設定をしました。
Githubからプルをしたらいくつか本番環境用に設定ファイルを書き換えてビルドをします。

実際にビルドして停止・起動やビルドが上手く行っているか確認してみます。


2013年9月22日日曜日

さくらのVPSでPlay Frameworkを動かす:Playをサービス化する

Play Frameworkの起動・停止をサービス化します。
によると、どうやら
target/start
で起動がされるようです。

起動するとRUNNING_PIDなるファイルが生成されるので、このファイルに記載されているプロセスをkillすれば停止できるようです。

vim /etc/init.d/play
#!/bin/bash 
# source function library
. /etc/rc.d/init.d/functions
# Path to the JVM
JAVA_HOME=/usr/java/default
export JAVA_HOME
export PATH=$PATH:$JAVA_HOME/bin
export PATH=$PATH:/usr/local/play
APPLICATION_PATH=アプリケーションのパス
RETVAL=0
SERVICE_NAME=`basename $0`
start() {
        echo -n $"Starting : $SERVICE_NAME"
        $APPLICATION_PATH/target/start &
        RETVAL=$?
        if [ $RETVAL == 0 ]; then
          success
        else
          failure
        fi
        echo
}
stop() {
        echo -n $"Stopping $SERVICE_NAME: "
        if [ -e $APPLICATION_PATH/RUNNING_PID ]; then
          kill `cat $APPLICATION_PATH/RUNNING_PID`
        fi
        RETVAL=$?
        if [ $RETVAL == 0 ]; then
          success
        else
          failure
        fi
        echo
}
restart() {
        stop
        start
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  status)
        status
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart}"
        exit 1
esac
exit $RETVAL


Play Frameworkを自動起動に設定します。

chmod +x /etc/init.d/play
chkconfig --add /etc/init.d/play
chkconfig play on

参考


playの自動起動スクリプト
アプリケーションを本番モードで起動する

さくらのVPSでPlay Frameworkを動かす:PlayとApacheの連携設定

さて、事前にApacheとPlayの連携を設定しましょう。
設定方法は
を参考にして以下のように設定します。
vim /etc/httpd/conf.d/play.conf
<VirtualHost *:80>
  ProxyPreserveHost On
  ProxyPass  /excluded !
  ProxyPass /play http://127.0.0.1:9000/
  ProxyPassReverse /play http://127.0.0.1:9000/
</VirtualHost>


Apacheを再起動します。

service httpd restart



さくらのVPSでPlay Frameworkを動かす:Jenkinsの設定

さて、Jenkinsの設定を行っていきます。

基本方針

管理者ユーザーを1人作って、そのユーザーのみビルドの実行などが出来るようにします。
一般ユーザーはビルド状態の参照だけ出来るようにします。

まずはセキュリティの設定をします。

次に管理者ユーザーのアカウントを作成します。

諸々のプラグインを導入します。
メトリック関係のプラグインも入れたいところですが、まずはGithubからプルしてPlayのビルド・デプロイをするために必要なプラグインを導入します。

インストールするプラグイン
  • GitHub Plugin
  • Git Plugin
をとりあえずインストールしました。

このJenkinsでは

  • Play Frameworkによるアプリケーションのビルド・デプロイ
  • Play FrameworkのUnitテスト
  • jarライブラリのビルド

を予定していますが、ログインしていない状態でもアクセスできるのはjarライブラリのビルドだけにしたいので、
権限管理から「 行列による権限設定(プロジェクト単位)」を選択して、作成した管理者ユーザーにのみ全権限を付与して、匿名ユーザーには閲覧権限も与えないように設定を行いました。

参考

さくらVPSでJenkinsをセットアップし、認証を行うまで



さくらのVPSでPlay Frameworkを動かす:Jenkinsのインストール

さてさくらのVPS上でPlay Frameworkが動く環境が準備出来ました。
しかしながら現在開発はMac上で行っています。

Macで開発したソースコードをGithubにPUSHしてPost-Receive HooksでVPS上にデプロイといった流れも取れるかと思いますが、今の時点でRubyを触りたくないので、JenkinsとGitをVPSにインストールして思ったタイミングで最新のソースコードをPULL,DEPLOYするようにしてみたいと思います。(さくらのVPSにgit(バージョン1.7.1)があらかじめインストールされていました。)



Jenkinsを入れておけばPlayのアプリケーションだけでなく、Playのアプリケーションで使っているライブラリのjarファイル生成も将来的に行うことを見越してです。
あとはPlayでテストコードを書いてみるかな・・・。といったことも考えています。

とりあえずまずはJenkinsのインストールです。

Jenkinsインストール


に従ってコマンドを実行してみます。

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

yum install jenkins

Jenkinsはインストールまではとっても簡単。

Jenkinsを起動・自動起動の設定をしておく

service jenkins start
chkconfig jenkins on

JenkinsとApache連携


Jenkinsはデフォルトで8080ポートで起動します。
このVPS上では基本的にApacheをプロキシサーバとして利用して、他のポートは塞ぐ運用で考えています。

Jenkinsは

http://IPアドレス/jenkins

でアクセスできるように設定をしていきたいと思います。(将来的にドメインを取った時にはhttp://jenkins.ドメインでアクセスできるようにしたい)

vim /etc/sysconfig/jenkins
JENKINS_ARGS="--prefix=/jenkins"
Jenkinsを再起動します。
service jenkins restart
Apacheの設定を行います。

 vim /etc/httpd/conf.d/jenkins.conf
ProxyPass         /jenkins  http://localhost:8080/jenkins
ProxyPassReverse  /jenkins  http://localhost:8080/jenkins
ProxyRequests     Off
# Local reverse proxy authorization override
# Most unix distribution deny proxy by default (ie /etc/apache2/mods-enabled/proxy.conf in Ubuntu)
<Proxy http://localhost:8080/jenkins*>
  Order deny,allow
  Allow from all
</Proxy>

Apacheを再起動します。

service httpd restart

http://IPアドレス/jenkins
にアクセスをして確認します。

参考

Running Jenkins behind Apache
jenkinsとapacheの連携







さくらのVPSでPlay Frameworkを動かす:Playのインストール

ようやくPlayのインストールになります。

Play2.1.5のインストール


今開発中のアプリケーションはPlay2.1.x系で作っているので、Play 2.1.5をVPSにインストールしたいと思います。

ちなみにPlayの場合は2.1.x系と2.2.x系だと全く別物になっている可能性があるので、注意が必要です。

cd /usr/local/src/
wget http://downloads.typesafe.com/play/2.1.5/play-2.1.5.zip
unzip play-2.1.5.zip
mv play-2.1.5 /var/lib/
don’t install to /opt, /usr/local
http://www.playframework.com/documentation/2.1.3/Installing
とのことで、インストール先には/usr/localは避けたほうがいいようです。

バージョンアップの際にさくっと切り替えられるようにしたいのでシンボリックリンクを貼っておきます。

cd /usr/local/
ln -s /var/lib/play-2.1.5 play
ls -lat
Jenkinsからplayインストールフォルダを操作できるようにパーミッションの変更をします。

Play! 2.0 / 2.1 ぐらいで play コマンドを実行したときに Permission denied な例外が発生する問題への対処

chmod -R go+wx /var/lib/play-2.1.5 play/framework/sbt/boot
chmod -R go+wx /var/lib/play-2.1.5 play/repository

Playにパスを通す


どこからでもplayコマンドが実行できるようにするため、パスを通します。

export PATH=$PATH:/usr/local/play

パスが通っているか確認をします。

cd /root/
play help

ヘルプが表示されればOKです。


さくらのVPSでPlay Frameworkを動かす:JDKのインストール

今作っているPlay Frameworkのアプリケーションは2.1.x系で作っています。

2.1.x系のバージョンのJavaは

http://www.playframework-ja.org/documentation/2.1.3/Installingによると

Play framework の実行には、JDK 6以降 が必要です。

とあるので、JDK7系で行ってみようかと思います。

JDKインストール


さくらのVPSは64ビットなので
から

 jdk-7u40-linux-x64.rpm

をダウンロードして、VPS上に転送をします。

サーバー上のターミナルからJDKのインストールを行います。

rpm -ivh jdk-7u40-linux-x64.rpm 
インストールが上手く行ったかバージョン確認コマンドを実行してみます。

java -version
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)
javac -version
javac 1.7.0_40

不要になった jdk-7u40-linux-x64.rpm は削除しておきました。

/etc/profileの編集


/etc/profileを編集しておきます。

vim /etc/profile
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

編集した内容を反映させます。

source /etc/profile


2013年9月21日土曜日

さくらのVPSでPlay Frameworkを動かす:MySQLの設定をする

Apacheに比べて設定する箇所の多いMySQL。
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
default-character-set = utf8
skip-character-set-client-handshake
innodb_file_per_table
query-cache-size=16M
#Change Buffer Pool Size
innodb_buffer_pool_size = 512M
innodb_log_file_size = 128M
tmp_table_size = 64M
table_cache = 256
key_buffer = 128M
default-storage-engine=INNODB
# Slow Query
log-slow-queries = /var/log/mysql-slow.log
long_query_time=1
log-queries-not-using-indexes
[mysql]
default-character-set = utf8
[client]
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid 

こんなかんじに設定をしました。さくらのVPS 1Gプランなので、半分ほどMySQLにメモリを割り当ててみました。

service mysqld start
MySQLを起動したら初期設定を行います。

mysql_secure_installation
パスワード等のもろもろの設定を行います。

ログローテーションの設定をします。

vim /etc/logrotate.d/mysql-log-rotate
/var/log/mysql/error.log {
        # create 600 mysql mysql
        notifempty
    daily
        rotate 3
        missingok
        compress
    postrotate
    # just if mysqld is really running
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin ping &>/dev/null
    then
       /usr/bin/mysqladmin flush-logs
    fi
    endscript
}

/var/log/mysql/query.log {
        # create 600 mysql mysql
        notifempty
    daily
        rotate 3
        missingok
        compress
    postrotate
    # just if mysqld is really running
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin ping &>/dev/null
    then
       /usr/bin/mysqladmin flush-logs
    fi
    endscript
}

/var/log/mysql-slow.log {
        # create 600 mysql mysql
        notifempty
    daily
        rotate 3
        missingok
        compress
    postrotate
    # just if mysqld is really running
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin ping &>/dev/null
    then
       /usr/bin/mysqladmin flush-logs
    fi
    endscript
}
ログローテーションに伴う設定を追加します。

vim /etc/my.cnf
[mysqladmin]
password = "パスワード"
user = root

再起動します。

service mysqld restart





さくらのVPSでPlay Frameworkを動かす:Apacheの設定をする

Apacheの設定を行います。

vim /etc/httpd/conf/httpd.conf

phpもindexに設定しておきます。

DirectoryIndex index.html index.html.var index.php

セキュリティ対策として以下を設定しておきます。

ServerTokens Prod
ServerSignature Off

Apacheを再起動します。

service httpd restart



さくらのVPSでPlay Frameworkを動かす:Apache,MySQL,PHPのインストール

以下の設定をします。

文字コードの設定

vim/etc/sysconfig/i18n
#LANG="C"
LANG="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"

http://support.sakura.ad.jp/manual/vps/ossetup.html

yum パッケージの更新

yum update

chkrootkit インストール

yum install chkrootkit

Apache,MySQL,PHPのインストール

yum install httpd httpd-devel mod_ssl mysql mysql-server mysql-devel php php-pdo php-mysql php-mbstring php-mcrypt php-xml gd php-gd php-devel php-pear php-openssl
自動起動の設定をしておく

chkconfig mysqld on
chkconfig httpd on



さくらのVPSでPlay Frameworkを動かす:iptablesの設定をする

さあVPSコントロールパネルからVPSを起動したらまずはiptablesの設定をします。

sshでのセキュリティを高めるために以下の設定を行います。

  • rootによるログインの禁止
  • パスワードによるログインの禁止
  • ポートの変更

まずはrootでログインします。

ssh root@IPアドレス -p 22

ログイン用のユーザーを作成します。

useradd USER_NAME -G wheel
passwd USER_NAME
あとで root になれるユーザを制限するために wheel に所属させておきます。

セキュリティ対策のため、もろもろ設定をしていきます。
vim /etc/ssh/sshd_config
ログインするためのポート番号を変更します。
Port SSH_PORT
rootによるログインを禁止します。
PermitRootLogin no
パスワード入力によるログインを禁止します。
PasswordAuthentication no
作成したユーザーによるsudoコマンド実行の設定を行います。
vim /etc/pam.d/su
auth required pam_wheel.so use_uid
の行のコメントアウトを外します。
vim /etc/login.defs
SU_WHEEL_ONLY yes
sudo visudo
# %wheel ALL=(ALL) ALL
の行のコメントアウトを外します。

公開鍵の設定を行っていきます。

新たに作成したユーザーのディレクトリに公開鍵を保存するためのsshフォルダを作成します。

su - USER_NAME
mkdir ~/.ssh/
chmod 700 ~/.ssh/

Macから接続するので、Terminalで次のコマンドを実行します。

ssh-keygen -f /Users/tyongeri/.ssh/id_rsa.IPアドレス

作成された公開鍵を転送します。
cd .ssh
scp id_rsa.IPアドレス.pub root@IPアドレス:/home/USER_NAME/.ssh/authorized_keys
サーバ側で再び作業をします。

su - USER_NAME
cd .ssh
sudo chown USER_NAME:USER_NAME authorized_keys
chmod 600 authorized_keys
さて、新しく作ったアカウントでsshログイン出来るか確認してみます。

ssh USER_NAME@IPアドレス -i id_rsa.IPアドレス -p 22
ついでにsudoが出来るか確認しておきます。
sudo su -
sshの設定変更を反映させます。
/etc/init.d/sshd restart
改めて変更したポートでアクセスできるか確認します。

ssh USER_NAME@IPアドレス -i id_rsa.IPアドレス -p SSH_PORT

ついでにrootでのログインが出来なくなっているか確認します。

ssh root@IPアドレス -p SSH_PORT
Macから接続する際に毎回鍵ファイルやポートの指定は手間なので、設定に記載します。

vim ~/.ssh/config
Host IPアドレス
    HostName IPアドレス
    Port SSH_PORT
    User USER_NAME
    identityfile ~/.ssh/id_rsa.IPアドレス
設定が出来ました。
ssh IPアドレス
で接続できることを確認します。


さくらのVPSでPlay Frameworkを動かす:VPSサーバを契約する

さくらのVPSでPlay Framework for Java 2.1.3を動かしてみたいと思います。

今回契約したのはさくらのVPS 1Gのプランです。

メモリ:1GB
ディスク容量:100GB
CPU:仮想 2コア

というスペックになっています。
果たしてPlay Frameworkはストレスなく動作してくれるのでしょうか。

最終的に構築したいのはこういった構成です。


フロントをApacheにして、プロキシ経由でPlay Frameworkにアクセスします。
バックエンド処理をPlay Frameworkに任せて、フロントのアプリケーションはCakePHPとかで作ることも想定しています。

あと、今回作るシステムでコアになっている部分は自作ライブラリとしてjarファイルにしていますが、jarファイルを作る環境がないので、Jenkinsも立ち上げてGithubからソースコードを取得してjarファイルの生成もしてもらうように考えています。

さくらのVPSを契約すると30分ほどでVPSが生成されます。
以前はサーバが起動した状態でホイッと渡されて環境を構築していましたが、最近はサーバを停止した状態で渡されるようになっています。

おそらくサーバを渡されてから構築するまでの間に起動したまま放置しておいてrootアカウントを乗っ取られるとか結構起きてサーバを停止した状態で渡されるようになったんじゃないかと思います。

さ、サーバの準備ができたらコントロールパネルからサーバを起動します。


2013年9月4日水曜日

Java Play framework 2.0のebeanで、Expr.containsを使ってのOR検索

一言多いプログラマーの独り言: Java Play framework 2.0のebeanで、OR検索


に触発されたので、書いてみる

public static Page page(int page, int rows, String sortBy, String order, String filter) {
    return 
        find.where("name like :keyword OR detail like :keyword")
            .setParameter("keyword", "%" + filter.trim() + "%")
            .orderBy(sortBy + " " + order)
            .findPagingList(rows)
            .getPage(page);
}

のように記載されていますが、Expr.containsを使ってこういう方法も使えるかと思います。

public static Page page(int page, int rows, String sortBy, String order, String filter) {
    return
        find.where().or(Expr.contains("name", filter.trim()), Expr.contains("detail",filter.trim()))
            .orderBy(sortBy + " " + order)
            .findPagingList(rows)
            .getPage(page);
}
http://www.avaje.org/static/javadoc/pub/com/avaje/ebean/Expr.html#contains(java.lang.String, java.lang.String)