2017-02-13 14 views
0

シンプルなWebアプリでは、ユーザーインタラクションが始まる前に存在しないCouchDB設計ドキュメントをいくつか作成したいと考えています。私は、SQLデータベースを使用していた場合は、マイグレーションとlein migrateまたは類似のものを使用してこの効果を達成すると思います。Clojure/Luminus web appにワンタイム設定コードを入れる場所は?

しかし、ここで私はこのように、コJSONと設計文書を作成couchライブラリを使用する:

{ "_id": "_design/pages", "language": "javascript", "views": { "by_tag": { "map": "function(doc) {\n if ('tags' in doc) {\n doc.tags.forEach(function(tag) {\n emit(tag, doc._id);\n });\n }\n}\t\n" } } }

私はにより示唆されるようにhandler.cljcore.clj(中init機能を作成しようとしましたさまざまなClojureの本)しかし、これは決して呼び出されません。

このコードはどこに記入しますか?ここで

答えて

0

は、データベースのセットアップとビューを作成するために、いくつかの機能のための新しいモジュールを追加...私が働いて持っているもの

です:

(ns clojure-wiki.models.setup 
    (:require [com.ashafa.clutch :as couch] 
      [clojure-wiki.models.db :as db])) 


(defn create-page-views [] 
    (db/with-db 
    (couch/save-view "pages" (couch/view-server-fns 
           :javascript 
           {:by_tag {:map 
"function(doc) { 
    if ('tags' in doc) { 
    doc.tags.forEach(function(tag) { 
     emit(tag, doc._id); 
    }); 
    } 
}" 
             } 
           :by_word {:map 
"function(doc) { 
    const stopwords = ['and', 'the']; 
    var freq = {}; 
    ((doc._id + \" \" + doc.tags + \" \" + doc.content).toLowerCase().match(/\\w+/g)).forEach(function(word) { 
    if (word.length >= 3 && stopwords.indexOf(word) == -1) { 
     freq[word] = (freq[word] || 0) +1; 
    } 
    }); 
    Object.keys(freq).forEach(function(word) { 
    emit(word, {count: freq[word]}); 
    }); 
}" 
              }})))) 

(defn setup-db [] 
    (create-page-views)) 

project.cljにタスクのエイリアスを追加します。

:aliases 
    {"setup-db" ["run" "-m" "clojure-wiki.models.setup/setup-db"]} 

今、私は1つオフタスクとしてこれを実行することができます。

lein setup-db 
関連する問題