cryogen-project / cryogen

A simple static site generator written in Clojure
http://cryogenweb.org/
Eclipse Public License 1.0
1.09k stars 96 forks source link

lein new cryogen my-blog fails with syntax error #201

Closed imbilltucker closed 4 years ago

imbilltucker commented 4 years ago

First, thanks for cryogen. It's great clojure has a nice tool in this space.

Following the guide causes an exception. It looks to me that clojure.string is left out of the name space of server.clj. This causes an error when initially setting up a blog.

Here's the how to reproduces this error using ($ lein -version Leiningen 2.8.1 on Java 1.8.0_222 OpenJDK 64-Bit Server VM ):


$lein new cryogen my-blog && cd my-blog
$ lein ring server
2019-12-12 21:43:51.698:INFO::main: Logging initialized @1578ms
Exception in thread "main" Syntax error compiling at (cryogen/server.clj:28:32).
    at clojure.lang.Compiler.analyze(Compiler.java:6808)
    at clojure.lang.Compiler.analyze(Compiler.java:6745)
    at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3820)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7108)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyze(Compiler.java:6745)
    at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3888)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7108)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7094)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7094)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyze(Compiler.java:6745)
    at clojure.lang.Compiler$IfExpr$Parser.parse(Compiler.java:2837)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7106)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyze(Compiler.java:6745)
    at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6120)
    at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:6436)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7106)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7094)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7094)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyze(Compiler.java:6745)
    at clojure.lang.Compiler$IfExpr$Parser.parse(Compiler.java:2837)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7106)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyze(Compiler.java:6745)
    at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6120)
    at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:6436)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7106)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7094)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7094)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyze(Compiler.java:6745)
    at clojure.lang.Compiler$IfExpr$Parser.parse(Compiler.java:2824)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7106)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.access$300(Compiler.java:38)
    at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:6384)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7106)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7094)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyze(Compiler.java:6745)
    at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6120)
    at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5467)
    at clojure.lang.Compiler$FnExpr.parse(Compiler.java:4029)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7104)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7094)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyze(Compiler.java:6745)
    at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6120)
    at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5467)
    at clojure.lang.Compiler$FnExpr.parse(Compiler.java:4029)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7104)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7094)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.access$300(Compiler.java:38)
    at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:596)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7106)
    at clojure.lang.Compiler.analyze(Compiler.java:6789)
    at clojure.lang.Compiler.analyze(Compiler.java:6745)
    at clojure.lang.Compiler.eval(Compiler.java:7180)
    at clojure.lang.Compiler.load(Compiler.java:7635)
    at clojure.lang.RT.loadResourceScript(RT.java:381)
    at clojure.lang.RT.loadResourceScript(RT.java:372)
    at clojure.lang.RT.load(RT.java:463)
    at clojure.lang.RT.load(RT.java:428)
    at clojure.core$load$fn__6824.invoke(core.clj:6126)
    at clojure.core$load.invokeStatic(core.clj:6125)
    at clojure.core$load.doInvoke(core.clj:6109)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.core$load_one.invokeStatic(core.clj:5908)
    at clojure.core$load_one.invoke(core.clj:5903)
    at clojure.core$load_lib$fn__6765.invoke(core.clj:5948)
    at clojure.core$load_lib.invokeStatic(core.clj:5947)
    at clojure.core$load_lib.doInvoke(core.clj:5928)
    at clojure.lang.RestFn.applyTo(RestFn.java:142)
    at clojure.core$apply.invokeStatic(core.clj:667)
    at clojure.core$load_libs.invokeStatic(core.clj:5985)
    at clojure.core$load_libs.doInvoke(core.clj:5969)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.core$apply.invokeStatic(core.clj:667)
    at clojure.core$require.invokeStatic(core.clj:6007)
    at clojure.core$require.doInvoke(core.clj:6007)
    at clojure.lang.RestFn.invoke(RestFn.java:436)
    at user$eval5.invokeStatic(form-init8338218600170895022.clj:1)
    at user$eval5.invoke(form-init8338218600170895022.clj:1)
    at clojure.lang.Compiler.eval(Compiler.java:7176)
    at clojure.lang.Compiler.eval(Compiler.java:7165)
    at clojure.lang.Compiler.load(Compiler.java:7635)
    at clojure.lang.Compiler.loadFile(Compiler.java:7573)
    at clojure.main$load_script.invokeStatic(main.clj:452)
    at clojure.main$init_opt.invokeStatic(main.clj:454)
    at clojure.main$init_opt.invoke(main.clj:454)
    at clojure.main$initialize.invokeStatic(main.clj:485)
    at clojure.main$null_opt.invokeStatic(main.clj:519)
    at clojure.main$null_opt.invoke(main.clj:516)
    at clojure.main$main.invokeStatic(main.clj:598)
    at clojure.main$main.doInvoke(main.clj:561)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.lang.Var.applyTo(Var.java:705)
    at clojure.main.main(main.java:37)
Caused by: java.lang.RuntimeException: No such namespace: string
    at clojure.lang.Util.runtimeException(Util.java:221)
    at clojure.lang.Compiler.resolveIn(Compiler.java:7383)
    at clojure.lang.Compiler.resolve(Compiler.java:7357)
    at clojure.lang.Compiler.analyzeSymbol(Compiler.java:7318)
    at clojure.lang.Compiler.analyze(Compiler.java:6768)
    ... 110 more
Subprocess failed
imbilltucker commented 4 years ago

I believe this can be address by adding an import: [clojure.string :as string] in server.clj's require list.

lacarmen commented 4 years ago

You're correct about the cause, sorry about the inconvenience, and thanks for pointing it out! I just pushed out a new version of the template to clojars, so the command should work now.