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 とかを使っていると、あまり意識しない部分なので、ログっておきます。
project_root/src/main/resources などで管理することが多い。
ここに設置したリソースは、compile した時に
project_root/target/scala-ver/classes 直下に設置される。
なので次のようなコードを書いていると、"sbt run" した時に、FileNotFoundExceptionが出てしまう。
(sbt run したときは project_root で実行されるので当たり前といえば当たり前である。)
この場合は ClassLoader の getResource を利用し、クラスローダからの相対パスでリソースを取得するべきである。
eclipse とかを使っていると、あまり意識しない部分なので、ログっておきます。
Scala、sbt の管理ライブラリの書き方
chefをつかってみる ~インストール編~
最近社内でもっぱらサーバ設定がらみの障害が出ており、構成もマシンごとに異なっていてちゃんと管理されておらず、これは自動構成管理ツールを導入しなきゃいけないなと感じたので、軽くchefについて調べてみました。
・ソフトウェアのインストール状況や設定ファイルを定義した状態に収束させる(冪等性)
・類似ソフトとして"Puppet"がある
・クライアント-サーバ型の構成(クライアント:管理されるコンピュータ)
・2つの動作モードがある。
chef-server ⇒ 上記で示したクライアント-サーバ型の構成動作モード
chef-solo ⇒ 単体でChefを動作させるモード
参考
http://jp.rubyist.net/magazine/?0035-ChefInDECOLOG#l8
chefマシンを作ってしまえば自動&遠隔でサーバ構築ができる、構築スクリプト(ruby&jsonで記述)をコードとして管理できるという部分が魅力的だと思います。
(chef-severは構築で軽く死ねるらしいので...)
VMWarePlayerでUbuntu13.0.4を動かして、そこにインストールしてみました。
chefを動作させるのにrubyも必要なので、まずそこから構築を...
※rbenvでrubyを入れるので、rvmを使っていれば先に削除してください。
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-p429rbenv rehashrbenv global 1.9.3-p429ruby -v
# 便利gem# 今回はchefに触れるだけなのでbundlerは入れないgem install rbenv-rehashrbenv 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フォルダの内容をコピーすれば大丈夫のようです。
やってみたところ、うまくいきました。
以上、備忘録として。
"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フォルダの内容をコピーすれば大丈夫のようです。
やってみたところ、うまくいきました。
以上、備忘録として。
Syntax Highlighter の使用手順
今後ブログにコードを載せることもあると思うので、
bloggerでSyntaxHighlighterを使用するための手順メモ。
準備
使用方法
記事を書く場合、下記のようにコードをタグで囲む。
その他にも設定ができるようなので、必要になれば調べます。
bloggerでSyntaxHighlighterを使用するための手順メモ。
準備
- Syntax Highlighter Scripts Generator(ココ)で使用するためのスクリプトを生成する。
(テーマや使用言語も選択できる) - bloggerの「テンプレート」→ブログで使用中の「HTMLの編集」でテンプレートのHTMLを開く。
- headタグ内に生成されたスクリプトを貼り付ける。
使用方法
記事を書く場合、下記のようにコードをタグで囲む。
もしくは
ここにコードを書く。
HTMLエスケープが必要。
■の部分は使用する言語によりBrush aliasesを設定する。(Brush aliasesはココ)
その他にも設定ができるようなので、必要になれば調べます。