Clojure/Luminus web app中的一次性设置代码放在哪里?

Clojure/Luminus web app中的一次性设置代码放在哪里?,clojure,leiningen,luminus,Clojure,Leiningen,Luminus,在一个简单的web应用程序中,我想创建一些CouchDB设计文档,如果它们在用户交互开始之前不存在的话。我知道,如果我使用的是SQL数据库,那么我会使用迁移和lein migrate或类似方法来实现这一效果 但是,这里我将使用coach库与JSON共同创建设计文档,如下所示: { “\u id”:“\u设计/页面”, “语言”:“javascript”, “意见”:{ “按标签”:{ “映射”:“函数(doc){\n如果('tags'在doc中){\n doc.tags.forEach(函数(

在一个简单的web应用程序中,我想创建一些CouchDB设计文档,如果它们在用户交互开始之前不存在的话。我知道,如果我使用的是SQL数据库,那么我会使用迁移和
lein migrate
或类似方法来实现这一效果

但是,这里我将使用
coach
库与JSON共同创建设计文档,如下所示:


{
“\u id”:“\u设计/页面”,
“语言”:“javascript”,
“意见”:{
“按标签”:{
“映射”:“函数(doc){\n如果('tags'在doc中){\n doc.tags.forEach(函数(tag){\n emit(tag,doc.\u id);\n});\n}\n}\t\n”
}
}
}

我曾尝试在
handler.clj
core.clj
中创建
init
函数(正如各种Clojure书籍所建议的那样),但从未调用过该函数


我应该把代码放在哪里?

这是我的工作内容

添加新的数据库设置模块和一些创建视图的函数:

(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