sbt run実行時のリソースの取得

sbt で properties などのリソースを管理するときは、慣例により
project_root/src/main/resources などで管理することが多い。

ここに設置したリソースは、compile した時に
project_root/target/scala-ver/classes 直下に設置される。

なので次のようなコードを書いていると、"sbt run" した時に、FileNotFoundExceptionが出てしまう。
(sbt run したときは project_root で実行されるので当たり前といえば当たり前である。)

この場合は ClassLoader の getResource を利用し、クラスローダからの相対パスでリソースを取得するべきである。

eclipse とかを使っていると、あまり意識しない部分なので、ログっておきます。



Scala、sbt の管理ライブラリの書き方

タイトルにキーワードつめこんだ感w

sbtのBuild.scala(build.sbt)でライブラリを管理する際、
libraryDependenciesに追記していくんですが、
たとえばlog4jとかってどう書くの?って思って色々調べた結果、下記のサイトに行き着いた。


sbtの書き方も載ってて便利(^^♪


chefをつかってみる ~インストール編~

最近社内でもっぱらサーバ設定がらみの障害が出ており、構成もマシンごとに異なっていてちゃんと管理されておらず、これは自動構成管理ツールを導入しなきゃいけないなと感じたので、軽くchefについて調べてみました。

chef(シェフ)とは

ruby製のサーバ構成管理ツール
・ソフトウェアのインストール状況や設定ファイルを定義した状態に収束させる(冪等性)
・類似ソフトとして"Puppet"がある
・クライアント-サーバ型の構成(クライアント:管理されるコンピュータ)
・2つの動作モードがある。
  chef-server ⇒ 上記で示したクライアント-サーバ型の構成動作モード
  chef-solo ⇒ 単体でChefを動作させるモード

参考
http://jp.rubyist.net/magazine/?0035-ChefInDECOLOG#l8

chefマシンを作ってしまえば自動&遠隔でサーバ構築ができる、構築スクリプト(ruby&jsonで記述)をコードとして管理できるという部分が魅力的だと思います。

早速いれてみる

chefの動きを体験するだけならchef-soloで十分みたいなので、今回はchef-solo導入用です。
(chef-severは構築で軽く死ねるらしいので...)
VMWarePlayerでUbuntu13.0.4を動かして、そこにインストールしてみました。
chefを動作させるのにrubyも必要なので、まずそこから構築を...
※rbenvでrubyを入れるので、rvmを使っていれば先に削除してください。

①rbenvでrubyをインストール

# rubyに必要な開発パッケージ
# sqliteはrailsに必要なやつだけどついでに
sudo apt-get install curl g++
sudo apt-get install zlib1g-dev libssl-dev libreadline-dev
sudo apt-get install libyaml-dev libxml2-dev libxslt-dev
sudo apt-get install sqlite3 libsqlite3-dev

# gitをインストール
sudo apt-get install git

# githubからrbenv、ruby-buildを取得してインストール
git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
git clone git://github.com/sstephenson/ruby-build.git ~/plugins/ruby-build
mv ~/plugins ~/.rbenv
cd ~/.rbenv/plugins/ruby-build
sudo ./install.sh

# rbenvをPATHに
# ついでにsudoをユーザのPATHで実行できるようにする
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
echo 'alias sudo="sudo env PATH=$PATH"' >> ~/.bashrc
source ~/.bashrc

# インストールできるruby一覧
rbenv install -l
# rubyをインストール
rbenv install 1.9.3-p429
rbenv rehash
rbenv global 1.9.3-p429
ruby -v

# 便利gem
# 今回はchefに触れるだけなのでbundlerは入れない
gem install rbenv-rehash
rbenv rehash

②chefをインストール

# chefをインストール
gem install chef
# knifeの初期化(knifeはchefリポジトリを操作するツール)
# 質問は全てデフォルト(入力せずにエンター)
knife configure

はい、見てのとおりほとんどrubyのインストール手順になりました。
まぁchefがgemで提供されている以上、しょうがないと思いますが。
(パッケージ版のchefもあるようで、chef-severはそちらのほうが楽だとか。。)

ちなみに上記手順を実行した結果、現時点(2013/05/29)では下記のバージョンのchefがインストールされました。
chef (11.4.4)

実行編では上記のバージョンを前提にします。

また、下記の書籍が大変参考になったので、興味のある方は是非。

Play frameworkでdistしたときにできる起動スクリプトのWindows版

最近Play frameworkをいじってます。

"play"コマンドの中には作成したアプリを、実行に必要な資材だけをまとめたアーカイブを作成してくれる"dist"タスクがあります。

全てjarにまとめてくれる上にサーバの起動スクリプトまではき出してくれるのですが、この起動スクリプトLinux/Mac用で、Windows用のものがなかったので作成しました。

以下のコードを"start.bat"という名前で、Linux/Mac用のスクリプトと同じ場所に設置します。


注意点としては、起動スクリプトやアプリのjarのパスにスペースが含まれているとうまく起動できません。
もう少しどうにかすればできるかもしれませんが、ちょっとわかりませんでした。
できたかたは是非コメントください。

また起動したときに下記のようなエラーメッセージが表示される場合があります。


Error: missing `server' JVM at `C:\Program Files\Java\jre7\bin\server\jvm.dll'.
Please install or use the JRE or JDK that contains these missing components.


調べたところ、"C:\WINDOWS\system32にあるjava.exeが実行されている"という情報があったので、環境変数PATHを変更したんですがダメでした。

おかしーなーと思って"C:\Program Files\Java\jre7\bin"の中を見ると"server"フォルダがない・・・。
(なんでだろう?)

さらに調べてみると、どうやら"C:\Program Files\Java\jre7\bin\client"の内容がserverフォルダと同じなので、自分でフォルダ作ってclientフォルダの内容をコピーすれば大丈夫のようです。
やってみたところ、うまくいきました。

以上、備忘録として。

build.sbtのコメント

さてこの1ヶ月色々ありましたが、ようやく再開できそうです。

sbtいじってたら少しだけ嵌ったのでメモ。


build.sbt内でコメントを書くときは、下記を使う。

// コメント

下記は使えない。

/* コメント */


build.sbtを拡張するときはproject/build.scalaを使用するので、てっきりScalaのコメントと同じ記述方法だと思ってたら違うみたいです...

sbtについては学びたい方は「始める sbt

Syntax Highlighter の使用手順

今後ブログにコードを載せることもあると思うので、
bloggerでSyntaxHighlighterを使用するための手順メモ。

準備
  1. Syntax Highlighter Scripts Generator(ココ)で使用するためのスクリプトを生成する。
    (テーマや使用言語も選択できる)
  2. bloggerの「テンプレート」→ブログで使用中の「HTMLの編集」でテンプレートのHTMLを開く。
  3. headタグ内に生成されたスクリプトを貼り付ける。

使用方法

記事を書く場合、下記のようにコードをタグで囲む。

ここにコードを書く。
HTMLエスケープが必要。

もしくは

■の部分は使用する言語によりBrush aliasesを設定する。(Brush aliasesはココ


その他にも設定ができるようなので、必要になれば調べます。