2013年4月17日水曜日

PlayとMongoとRedis連携試してみる


Play


Play frameworkのインストールと設定…2.1を公式からDLして適当に入れて行けるかと思ったけどなんかちょっとややこしそうなのでググってみた。

おっとけよ CentOSにPlay frameworkインストール

を参考にすすめてみる。
無事動いたブラウザから見えた。


VMWareの共有フォルダ機能を有効にしておく
@IT総合トップ > Linux & OSS > Linux Tips Index > VMwareのフォルダ共有機能を使うには
を参考にした。

VMWareの管理>仮想マシン設定>オプション>共有フォルダ
とりあえずshareってフォルダを作成

ln -s /mnt/hgfs/share share
でシンボリックリンク貼っておく

mongoDB


まずはplay関係なくScalaから使える状態に。

cd share
mkdir mongoTest
cd mongoTest

ITの波間にゆーらゆら mongodb+casbah+scala
グニャラくんのwktk運営日記 Scala + finagle + MongoDB + Herokuで2chクローンを作る(連載第2回)
mongoDB公式 1.Getting Started を参考に。


vi build.sbt

name := "mongo test"

version := "1.0.0"

scalaVersion := "2.10.0"

organization := ""

libraryDependencies += "org.mongodb" %% "casbah" % "2.5.0"


保存して
sbt




[success]

って出たのでおk


mkdir -p src/main/scala/mongo.casbah/

vi src/main/scala/mongo.casbah/Sample.scala


package mongo.casbah

object Sample extends App {
  println("Ahhhhhhh")
}


でsbt run


Ahhhhhhh

と出たのでこれもおkっぽい


早速Mongoに繋ぐ準備をしてみる


vi src/main/scala/mongo.casbah/Sample.scala

package mongo.casbah
import com.mongodb.casbah.Imports._
object Sample extends App {
        val mongoClient = MongoClient()
        val mongoDB = mongoClient("casbah_test")
        val mongoColl = mongoClient("casbah_test")("test_data")
        val newObj = MongoDBObject("foo" -> "bar", "x" -> "y", "pie" -> 3.14, "spam" -> "eggs")
        val builder = MongoDBObject.newBuilder
        builder += "L2P" -> "NOOB"
        builder += "kek" -> "bur"
        println(builder.result)
        println(newObj.get("foo"))
}


sbt run

[info] Set current project to mongo casbah test (in build file:/mnt/hgfs/share/sbt-mongo/)
[info] Running mongo.casbah.Sample
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
{ "L2P" : "NOOB" , "kek" : "bur"}
bar
[success] Total time: 4 s, completed 2013/04/17 16:56:52

とりあえずセットとゲットはできてるので良しとする。
Playとの連携はまた後ほど調べる。

Redis

Ruby Diary redisインストール(CentOS 6.2) 
を参考にしつつバージョンだけ変えて実行
wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar xzvf redis-2.6.12.tar.gz
cd redis-2.6.12.tar.gz
make
sudo make install

問題なく終了

redis-server

で起動し、

redis-cli
redis 127.0.0.1:6379>set 1 aaa
OK
redis 127.0.0.1:6379>get 1
"aaa"

動いてるのでおk

developer's diary redis 2.2.12のインストールメモ(amazon Linux)
をまるっと真似してinit.dで起動時実行設定しておく

Play-Plugin-Redis

https://github.com/typesafehub/play-plugins/tree/master/redis

README.md参照にしつつ

play new sampleApp
cd sampleApp
vi project/Build.scala

val appDependenciesのトコに

"com.typesafe" %% "play-plugins-redis" % "2.0.4"

追加して保存

vi conf/play.plugins

550:com.typesafe.plugin.RedisPlugin

と書いて保存

vi conf/application.conf

ehcacheplugin=disabled

と追加して保存

play update

[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: com.typesafe#play-plugins-redis_2.10;2.0.4: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::

と出るので、repoをチェック

http://repo.typesafe.com/typesafe/releases/com/typesafe/

一覧を見ると

play-plugins-redis_2.10/

があるのでそこを開いて見てみる

2.1-09092012-2/           13-Jan-2013 01:10    -
2.1-1-RC2/                16-Jan-2013 01:10    -
2.1-RC2/                  13-Jan-2013 01:10    -


RCは避けたいので2.1-09092012-2と言う怪しげな名前のにしてみる
vi project/Build.scala
"com.typesafe" %% "play-plugins-redis" % "2.1-09092012-2"

に修正。

play update

[error] (*:update) sbt.ResolveException: unresolved dependency: org.sedis#sedis_2.10.0;1.1.0: not found

今度はsedisが見つからんとな
ググって見るとこんな記事が見つかった。

Using Redis PubSub with Play 2.1.0

ここに書かれてる通りにresolverを追加してみる。


vi project/Build.scala
import sbt._
import Keys._
import play.Project._
object ApplicationBuild extends Build {
  val appName         = "sampleApp"
  val appVersion      = "1.0-SNAPSHOT"
  val appDependencies = Seq(
    "com.typesafe" %% "play-plugins-redis" % "2.1-09092012-2"
  )
  val main = play.Project(appName, appVersion, appDependencies).settings(
        resolvers += "org.sedis" at "http://pk11-scratch.googlecode.com/svn/trunk"
  )
}


こんな感じに。リトライ。

play update




[info] Done updating.
[success] Total time: 19 s, completed 2013/04/17 16:24:45

成功した模様。とりあえずここまで。

0 件のコメント:

コメントを投稿

コメントを投稿