2017-02-13 44 views
0

在一个简单的Web应用程序中,如果在用户交互开始前它们不存在,我想创建一些CouchDB设计文档。据我所知,如果我使用SQL数据库,那么我会使用迁移和lein migrate或类似的来实现这种效果。在Clojure/Luminus web应用程序中放置一次性设置代码的位置?

不过,在这里我将使用couch图书馆合作创建JSON的设计文件,就像这样:

{ "_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"]} 

现在我可以为一次性的任务运行此:

lein setup-db 
相关问题