【问题标题】:Where to put one-time set up code in Clojure / Luminus web app?在 Clojure / Luminus 网络应用程序中将一次性设置代码放在哪里?
【发布时间】:2023-03-24 15:25:01
【问题描述】:

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

但是,在这里我将使用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 书籍所建议的那样),但这从未被调用过。

我把这段代码放在哪里?

【问题讨论】:

    标签: clojure leiningen luminus


    【解决方案1】:

    这就是我的工作......

    添加一个新模块用于数据库设置和一些创建视图的功能:

    (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
    

    【讨论】:

      猜你喜欢
      • 2018-07-02
      • 2012-08-26
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      相关资源
      最近更新 更多