<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MongoDB &#8211; blog.fukata.org</title>
	<atom:link href="/archives/tag/mongodb/feed/" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>旅するプログラマ</description>
	<lastBuildDate>Fri, 11 Aug 2017 22:58:49 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.6</generator>
	<item>
		<title>norikra + fluentd + mongodbで遊んだ</title>
		<link>/archives/7651/</link>
					<comments>/archives/7651/#respond</comments>
		
		<dc:creator><![CDATA[fukata]]></dc:creator>
		<pubDate>Mon, 24 Mar 2014 05:24:37 +0000</pubDate>
				<category><![CDATA[開発]]></category>
		<category><![CDATA[fluentd]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[norikra]]></category>
		<guid isPermaLink="false">http://fukata.org/?p=7651</guid>

					<description><![CDATA[去年からずっと導入したい導入したいと思っているnorikra。未だに導入できていないわけですが、norikraがどういったものなのか感覚だけでも社内の人たちに分かってもらえればと思い、社内勉強会でデモ ... <a href="/archives/7651/"> 続きを読む</a>]]></description>
										<content:encoded><![CDATA[<p>去年からずっと導入したい導入したいと思っているnorikra。未だに導入できていないわけですが、norikraがどういったものなのか感覚だけでも社内の人たちに分かってもらえればと思い、社内勉強会でデモを行った時の環境をvagrantで残したのでメモしておきたいと思います。</p>
<p><span id="more-7651"></span></p>
<div class="ad_section"><div class="ad_title">広告</div><div class="ad_body"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- blog-content-bottom1 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-9703571485671477"
     data-ad-slot="4353022998"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div></div>
<p><a href="https://github.com/fukata/vagrant-norikra-fluentd-mongodb" title="fukata/vagrant-norikra-fluentd-mongodb">fukata/vagrant-norikra-fluentd-mongodb</a></p>
<p>fluentd経由でnorikraに送られたログをストリームで処理してくれている感じが分かるかと思います。</p>
<p>何かで遊んだ環境をvagrantで残しておけば環境構築ログも残せるしすぐ手元で動かせるしで便利なので次回からもvagrantで残していこうと思った。</p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/7651/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>(途中メモ)fluentdのout_exec_filterがうまく動作しない</title>
		<link>/archives/7159/</link>
					<comments>/archives/7159/#comments</comments>
		
		<dc:creator><![CDATA[fukata]]></dc:creator>
		<pubDate>Sun, 29 Jul 2012 15:05:59 +0000</pubDate>
				<category><![CDATA[開発]]></category>
		<category><![CDATA[fluentd]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Treasure Data]]></category>
		<guid isPermaLink="false">http://fukata.org/?p=7159</guid>

					<description><![CDATA[fluentdのout_exec_filterを使って、アプリから出されるログを整形して出力をそのままfluentdへ戻すということが出来ます。コレを使って、検索クエリをmecabに通して名詞のみを引 ... <a href="/archives/7159/"> 続きを読む</a>]]></description>
										<content:encoded><![CDATA[<p>fluentdのout_exec_filterを使って、アプリから出されるログを整形して出力をそのままfluentdへ戻すということが出来ます。コレを使って、検索クエリをmecabに通して名詞のみを引っ張ってこようかと思い、以下の様なプログラムを書いてみました。参考にしたのは、<a href="https://d.hatena.ne.jp/studio3104/20120619/1340069545" target="_blank">こちら</a>です。</p>
<p>現在も調査中なので、下記はメモ程度に受け取って下さい。</p>
<p><span id="more-7159"></span></p>
<div class="ad_section"><div class="ad_title">広告</div><div class="ad_body"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- blog-content-bottom1 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-9703571485671477"
     data-ad-slot="4353022998"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div></div>
<p>今回使用したtd-agentのバージョンは<strong>0.10.25</strong>になります。</p>
<p>exec_filterのソースとtd-agent.confの設定は下記のようになっています。mecabで分解した文字列が名詞かどうか判定するのが下記のやり方で正しいのかどうかわかりませんが。</p>
<p><script src="https://gist.github.com/3199348.js"> </script></p>
<p>実際に動かしてみた挙動としては、td-agentを再起動する段階で値が入ることもあれば、入らないこともあるという感じで、少なくともリアルタイムには値が入っていませんでした。今回行ったmecabでの名詞取り出しの処理はout_exec_filterで行うには重い処理なのかもしれないと思い、試しにmecabを使わずに固定の文字列を出力するだけのものを作成し、動かしてみたところ、クエリの総数よりも少ない数がいくつかだけデータベースに格納されているといった状況でした。</p>
<p>ちなみに、今回、Treasure Dataとローカルに設置したMongoDBの2つに格納するようにしていますが、ローカルのMongoDBにもリアルタイムとは言えないラグがありました。また、予想された数よりも少ないレコードしかありませんでした。out_exec_filterを介さず、直接データを格納するようにすればほとんどラグが無くデータが格納されます。</p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/7159/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>MongoDBのエラー「8011: tried to insert object with no valid shard key」でハマった</title>
		<link>/archives/7116/</link>
					<comments>/archives/7116/#respond</comments>
		
		<dc:creator><![CDATA[fukata]]></dc:creator>
		<pubDate>Tue, 12 Jun 2012 00:34:51 +0000</pubDate>
				<category><![CDATA[開発]]></category>
		<category><![CDATA[fluentd]]></category>
		<category><![CDATA[MongoDB]]></category>
		<guid isPermaLink="false">http://fukata.org/?p=7116</guid>

					<description><![CDATA[今月も既に中旬となってしまいましたが、今月初めてのブログ更新です。 役職が付くようになり、今まで自分が行なっていた仕事を他に振るようになったので、以前に比べてプログラミングする量がかなり減って多少焦っ ... <a href="/archives/7116/"> 続きを読む</a>]]></description>
										<content:encoded><![CDATA[<p>今月も既に中旬となってしまいましたが、今月初めてのブログ更新です。</p>
<p>役職が付くようになり、今まで自分が行なっていた仕事を他に振るようになったので、以前に比べてプログラミングする量がかなり減って多少焦っているところです。</p>
<p>今回は、fluentd経由でMongoDBにログを400万件ほど挿れていたところ、「<strong>8011: tried to insert object with no valid shard key</strong>」というエラーが出てかなりハマったのでログとして残しておきます。</p>
<p><span id="more-7116"></span></p>
<div class="ad_section"><div class="ad_title">広告</div><div class="ad_body"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- blog-content-bottom1 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-9703571485671477"
     data-ad-slot="4353022998"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div></div>
<p>foward先としてリモートに設置したfluentdのログに下記のようなものが出ていました。</p>
<pre>
2012-06-11 21:33:18 +0900: failed to flush the buffer, retrying. error="8011: tried to insert object with no valid shard key" instance=70320056203900
2012-06-11 21:33:18 +0900: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.6.2/lib/mongo/networking.rb:95:in `send_message_with_safe_check'
2012-06-11 21:33:18 +0900: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.6.2/lib/mongo/collection.rb:979:in `block in insert_documents'
2012-06-11 21:33:18 +0900: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.6.2/lib/mongo/util/logging.rb:36:in `instrument'
2012-06-11 21:33:18 +0900: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.6.2/lib/mongo/collection.rb:977:in `insert_documents'
2012-06-11 21:33:18 +0900: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.6.2/lib/mongo/collection.rb:353:in `insert'
2012-06-11 21:33:18 +0900: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluent-plugin-mongo-0.6.7/lib/fluent/plugin/out_mongo.rb:139:in `operate_invalid_records'
2012-06-11 21:33:18 +0900: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluent-plugin-mongo-0.6.7/lib/fluent/plugin/out_mongo.rb:118:in `operate'
2012-06-11 21:33:18 +0900: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluent-plugin-mongo-0.6.7/lib/fluent/plugin/out_mongo.rb:106:in `write'
2012-06-11 21:33:18 +0900: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.22/lib/fluent/buffer.rb:274:in `write_chunk'
</pre>
<p>no valid shard keyと書かれているのでてっきりshard keyに不正な値でも指定してしまったのかなと思い、そこばかり探していたんですが、似たような現象にあったブログもあまり見つからなかったので、ローラー作戦的に挿入するドキュメントの内容をshard keyのみから始まり、徐々に増やしていくことにしました。そこで、一番最初にshard keyのみで挿入したところ、正常に処理できたので、shard key自体が問題ではないんだなと思いました。徐々に増やしていった結果、あるキーに対する値が変に文字化けを起こしており、それが原因で当エラーが発生していたようです。そのキーを外したところ、正常に処理されました。</p>
<p>今回はあまり時間がなかったので直接的な原因は調べられていませんが、一段落着いたら調べてみたいと思います。</p>
<p>また、少し気になった動作として挿入できなかった場合にリトライするような設定になっているんですが、リトライする単位はchunkだと思うのですが、chunk内で異常なデータを含まないものに関しては重複して挿入されているような気がします。（プログラム側から指定した以上の件数が挿入されていたため）コレを防ぐ方法があるのかどうかはまだ分かりませんが・・・。</p>
<h2>環境</h2>
<p>MongoDB: 2.0.6<br />
fluentd: 1.1.6</p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/7116/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Compojure(Ring)でSessionを使う</title>
		<link>/archives/6409/</link>
					<comments>/archives/6409/#respond</comments>
		
		<dc:creator><![CDATA[fukata]]></dc:creator>
		<pubDate>Mon, 31 Oct 2011 18:11:02 +0000</pubDate>
				<category><![CDATA[開発]]></category>
		<category><![CDATA[Compojure]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Ring]]></category>
		<category><![CDATA[sandbar]]></category>
		<guid isPermaLink="false">http://fukata.org/?p=6409</guid>

					<description><![CDATA[CompojureでSessionに何かデータ保存したいと思ったらまだCompojureでSessionを使ったことがなかったので簡単に使ってみました。 Compojure(Ring)でセッションを使 ... <a href="/archives/6409/"> 続きを読む</a>]]></description>
										<content:encoded><![CDATA[<p>CompojureでSessionに何かデータ保存したいと思ったらまだCompojureでSessionを使ったことがなかったので簡単に使ってみました。</p>
<p>Compojure(Ring)でセッションを使う場合、handlerにwrap-sessionを指定してあげるとCookieセッションが使える。デフォルトだとデータの保存先はメモリ。</p>
<p>で、少しSession関連のモジュールを調べてみたところ、sandbarというのがwrap-sessionのラッパーで高機能かつ、インタフェースが使いやすかったので、今回はコレを使うことにしました。</p>
<p><span id="more-6409"></span></p>
<div class="ad_section"><div class="ad_title">広告</div><div class="ad_body"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- blog-content-bottom1 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-9703571485671477"
     data-ad-slot="4353022998"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div></div>
<h3>Session Wrapper</h3>
<p>sandbarはwrap-sessionのラッパーというだけでなく、セッションを使ったサイトでよく使われるような、ログインユーザの名前や権限を取得する関数等も提供されています。</p>
<p><a href="https://github.com/brentonashworth/sandbar">brentonashworth/sandbar &#8211; GitHub</a></p>
<p>実際に組み込み後のコードはこんな感じになりました。</p>
<pre lang="clojure">
(ns compojuretest.core
  (:use compojure.core
        compojure.response
        ring.adapter.jetty
        ring.middleware.reload-modified
        somnium.congomongo
        [ring.util.response :only (response content-type)]
        fleet
+        (sandbar stateful-session auth))

... 省略 ...

;; =============================================
;; Routes
;; =============================================
(defroutes app-routes 
  (GET "/" {} (tpl/index {})))

+(def app
+  (-> app-routes
+    wrap-stateful-session))

;; =============================================
;; Run Server
;; =============================================
;; AutoReload Configuration
(def app (handler/site app))
(def handlerApp
    (wrap-reload-modified #'app ["src"]))

(defn -main []
  (let [port (Integer/parseInt (get (System/getenv) "PORT" "8080"))]
    (run-jetty handlerApp {:port port})))
</pre>
<p>これで、Sessionが使えるようになります。Sessionを取り出したり設定したりするAPIは本家のwikiを見るか、行数が少ないのでソースを直接見たほうが早いかもしれません。該当箇所は以下です。</p>
<p><a href="https://github.com/brentonashworth/sandbar/blob/master/src/sandbar/stateful_session.clj#L94">src/sandbar/stateful_session.clj at master from brentonashworth/sandbar &#8211; GitHub</a></p>
<h3>保存先</h3>
<p>上記に書いた通り、標準のSessionの保存先はメモリとなっているので、サーバの再起動等で消えてしまいます。少し不安でもあったので、ファイルかDBに保存するモジュールが無いか調べました。</p>
<p>その前にwrap-sessionで指定できるSessionの保存先というのはオプションで指定でき、下記の継承したものであれば良いようです。</p>
<p><a href="https://github.com/mmcgrana/ring/blob/master/ring-core/src/ring/middleware/session/store.clj">ring-core/src/ring/middleware/session/store.clj at master from mmcgrana/ring &#8211; GitHub</a></p>
<h3>SessionもMongoDBに保存したい！</h3>
<p>せっかく今回、MongoDBを使っているので、セッションもMongoDBに格納したい！！</p>
<p><a href="https://clojars.org/">clojars.org</a>で検索してみたところ、下記のモジュールが見つかりました。</p>
<p><a href="https://github.com/hozumi/mongodb-session">hozumi/mongodb-session &#8211; GitHub</a></p>
<p>サンプルを見たところ</p>
<pre lang="clojure">
(ns hello
  (:require [ring.middleware.session :as rs]
            [somnium.congomongo :as congo]
            [hozumi.mongodb-session :as mongoss]
        ...))

(congo/mongo! :db "mydb" :host "127.0.0.1")

(defroutes my-routes ....)

(def app (-> my-routes
           (rs/wrap-session {:store (mongoss/mongodb-store)})))
</pre>
<p>とあるので、既に宣言している<strong>mongo!</strong>の周り無視して、wrap-session辺りを修正するだけで大丈夫なようです。mongodb-storeを組み込んだコードはこんな感じになりました。</p>
<pre lang="clojure">
(ns compojuretest.core
  (:use compojure.core
        compojure.response
        ring.adapter.jetty
        ring.middleware.reload-modified
        somnium.congomongo
        [ring.util.response :only (response content-type)]
        fleet
        (sandbar stateful-session auth))
  (:require [compojure.route :as route]
            [compojure.handler :as handl(mongoss/er]
            [clj-json.core :as json]
            [clojure.contrib.string :as string]
+            [hozumi.mongodb-session :as mongoss]))

... 省略 ...

;; =============================================
;; Routes
;; =============================================
(defroutes app-routes 
  (GET "/" {} (tpl/index {})))

(def app
  (-> app-routes
-    wrap-stateful-session
+    (wrap-stateful-session {:store (mongoss/mongodb-store)})))

;; =============================================
;; Run Server
;; =============================================
;; AutoReload Configuration
(def app (handler/site app))
(def handlerApp
    (wrap-reload-modified #'app ["src"]))

(defn -main []
  (let [port (Integer/parseInt (get (System/getenv) "PORT" "8080"))]
    (run-jetty handlerApp {:port port})))
</pre>
<p>この状態で実際にセッションに値を格納するとMongoDBの方に<strong>ring_sessions</strong>というコレクションが出来ていると思います。ちなみに、ring_sessionsのレコードはこんな形式です。</p>
<pre>
> db.ring_sessions.find().forEach(printjson);
{
	"_id" : "c83528b0-cfce-4e0f-b70b-90adce0c21d5",
	"_date" : ISODate("2011-10-31T17:34:55.022Z"),
	"_sandbar_session" : {
		"name" : "Tatsuya Fukata"
	}
}
</pre>
<h3>Cookieのオプション</h3>
<p>wrap-sessionで生成されるCookieはデフォルトではexpires未指定でブラウザを閉じた場合に消去されるものになっています。これらのオプションを指定する場合には、wrap-sessionの引数として下記のように指定します。また、これはwrap-stateful-sessionでも同じ形式の引数で渡すことが出来ます。</p>
<pre lang="clojure">
(def app
  (-> app-routes
    (wrap-stateful-session
      {:cookie-attrs {:expires "Thu, 1-Jan-2030 00:00:00 GMT", :path "/"},
      :cookie-name "compojuretest-session",
      :store (mongoss/mongodb-store)})))
</pre>
<p>上記以外の詳しい指定方法については、下記のソースを参照してみてください。</p>
<p><a href="https://github.com/mmcgrana/ring/blob/master/ring-core/src/ring/middleware/session.clj#L28">ring-core/src/ring/middleware/session.clj at master from mmcgrana/ring &#8211; GitHub</a></p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/6409/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>go-mongoでの基本操作</title>
		<link>/archives/6167/</link>
					<comments>/archives/6167/#respond</comments>
		
		<dc:creator><![CDATA[fukata]]></dc:creator>
		<pubDate>Sat, 01 Oct 2011 19:55:32 +0000</pubDate>
				<category><![CDATA[開発]]></category>
		<category><![CDATA[go-mongo]]></category>
		<category><![CDATA[MongoDB]]></category>
		<guid isPermaLink="false">http://fukata.org/?p=6167</guid>

					<description><![CDATA[一部の機能を実装するのにgolangを利用することになり、DBはMongoDBだったので、以下のライブラリを使うことにしました。 garyburd/go-mongo &#8211; GitHub もう ... <a href="/archives/6167/"> 続きを読む</a>]]></description>
										<content:encoded><![CDATA[<p>一部の機能を実装するのにgolangを利用することになり、DBはMongoDBだったので、以下のライブラリを使うことにしました。</p>
<p><a href="https://github.com/garyburd/go-mongo">garyburd/go-mongo &#8211; GitHub</a></p>
<p>もう一つ、<a href="https://github.com/mikejs/gomongo">gomongo</a>（名前が紛らわしい）というのもあるそうですが、こっちは現リリース版のgolangだとコンパイルが通らなかったので、とりあえず、上記のものを利用しました。</p>
<p>githubのREADMEに情報が少なかったので、メモとして基本的な操作方法について記載しておきます。</p>
<h2>基本操作</h2>
<h3>接続、コレクションの選択、切断</h3>
<pre lang="GOLANG">
// 接続
conn, err := mongo.Dial("localhost:27017")
// コレクションの選択
c := mongo.Collection{conn, "hoge.foocollections", mongo.DefaultLastErrorCmd}
// 切断
conn.Close()
</pre>
<h3>SELECT</h3>
<pre lang="GOLANG">
// 単数
// 値をマップに格納
var foo_map mongo.M
err := c.Find(nil).One(&foo_map)
log.Println(foo_map["_id"])

// 値を構造体に格納
type Foo struct {
    Id mongo.ObjectId `bson:"_id"`
    Name string `bson:"name"`
}

var foo Foo
err := c.Find(nil).One(&foo)
log.Println(foo.Id)

// 複数
cursor, err := c.Find(nil).Limit(10).Cursor()
for cursor.HasNext() {
    var f Foo
    err = cursor.Next(&f)
    log.Println(f)
}
</pre>
<h3>INSERT</h3>
<pre lang="GOLANG">
id := mongo.NewObjectId()
err = c.Insert(&Foo{Id: id, Name: "Tatsuya Fukata"})
</pre>
<h3>UPDATE</h3>
<pre lang="GOLANG">
// 引数： 検索条件, 更新情報
err = c.Update(mongo.M{"name": "Tatsuya Fukata"}, mongo.M{"name": "深田達也"})
</pre>
<h3>DELETE</h3>
<pre lang="GOLANG">
err = c.Remove(mongo.M{"name": "深田達也"})
</pre>
<h2>BSONとGolangの変換表</h2>
<p>go-mongoではBSONからgolang内の型変換は下記のようになっています。</p>
<pre lang="GOLANG">
//      BSON                -> Go
//      Integer32           -> signed and unsigned integers, floats, bool
//      Integer64           -> signed and unsigned integers, floats, bool
//      Array               -> []interface{}, other slice types
//      Binary              -> []byte
//      Boolean             -> bool
//      Datetime            -> mongo.Datetime, int64
//      Document            -> map[string]interface{}, struct types
//      Double              -> signed and unsigned integers, floats, bool
//      MinValue, MaxValue  -> mongo.MinMax
//      ObjectID            -> mongo.ObjectId
//      Symbol              -> mongo.Symbol, string
//      Timestamp           -> mongo.Timestamp, int64
//      string              -> string
</pre>
<p>後でmasterブランチのテストコードを見てみると上記の方法ではなく、Queryに対してUpdateやRemoveメソッドが使えるようになっていたので、今後はメソッドチェインで検索条件を構築した後に、操作が行えるようにもなるみたいです。</p>
<p>これは、goinstallでインストールされるバージョンにはまだ含まれていません。</p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/6167/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>HerokuでClojure(Compojure)を動かすまで</title>
		<link>/archives/6150/</link>
					<comments>/archives/6150/#respond</comments>
		
		<dc:creator><![CDATA[fukata]]></dc:creator>
		<pubDate>Sun, 25 Sep 2011 06:51:42 +0000</pubDate>
				<category><![CDATA[開発]]></category>
		<category><![CDATA[Compojure]]></category>
		<category><![CDATA[Heroku]]></category>
		<category><![CDATA[MongoDB]]></category>
		<guid isPermaLink="false">http://fukata.org/?p=6150</guid>

					<description><![CDATA[最近、あるアプリを作るためにHeroku上でClojureを動かしてみました。 その際参考にしたサイトは下記です。 HerokuでClojure(Compojure)を使う &#8211; komag ... <a href="/archives/6150/"> 続きを読む</a>]]></description>
										<content:encoded><![CDATA[<p>最近、あるアプリを作るためにHeroku上でClojureを動かしてみました。</p>
<p>その際参考にしたサイトは下記です。</p>
<ul>
<li><a href="https://docs.komagata.org/4816">HerokuでClojure(Compojure)を使う &#8211; komagata</a></li>
<li><a href="https://devcenter.heroku.com/articles/clojure">Heroku | Dev Center | Getting Started With Clojure on Heroku/Cedar</a></li>
</ul>
<p>で、いつものようにまともに説明を読まずにやっていたらherokuにpushして、heroku psコマンドでプロセスを確認したところ一向に立ち上がっていませんでした。で、もう一度公式の手順を一から順に観てるとProcfileを作成していないことに気づき、Procfileを作成し、pushしたところ、正常にプロセスが立ち上がりました。</p>
<p>たいてい動かない時というのは、自分が手順をすっぽかしてる事が多いですね・・・気を付けないと。</p>
<p><a href="https://devcenter.heroku.com/articles/procfile">Heroku | Dev Center | Declaring and Scaling Process Types with Procfile</a></p>
<p>一応今のところ、Clojure(Compojure) + MongoDBという構成（テンプレートエンジンは模索中）で作ろうかと思っているので、また何かあったら書こうかと思います。それにしてもherokuコマンドだけでも色々なことができるんですね。</p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/6150/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
