2017-02-13 3 views
0

Dans une application Web simple, je souhaite créer quelques documents de conception CouchDB s'ils n'existent pas avant que l'interaction de l'utilisateur ne commence. Je comprends que si j'utilisais une base de données SQL, j'utiliserais les migrations et lein migrate ou similaire pour obtenir cet effet.Où placer un code d'installation ponctuel dans l'application web Clojure/Luminus?

Cependant, ici, je vais utiliser la co bibliothèque couch créer les documents de conception avec JSON, comme ceci:

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

J'ai essayé de créer une fonction init dans handler.clj et core.clj (comme le suggère divers livres de Clojure) mais ceci n'est jamais appelé.

Où puis-je mettre ce code?

Répondre

0

Voici ce que j'ai travailler ...

Ajouter un nouveau module pour la configuration de base de données et certaines fonctions pour créer les vues:

(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)) 

Ajouter un alias de tâche à project.clj:

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

maintenant, je peux courir cela comme une tâche ponctuelle:

lein setup-db