在Clojure/Luminus web应用程序中放置一次性设置代码的位置?
问题描述:
在一个简单的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.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