美文网首页
cryogen博客模板更新,阻止ring-server默认打开浏

cryogen博客模板更新,阻止ring-server默认打开浏

作者: 小马将过河 | 来源:发表于2021-07-19 23:32 被阅读0次

公司2018年使用cryogen搭建的blog年久失修,从搭建起来就没有更新过,2020年疫情期间,主人carmen.la是有更新的。

看项目目录结构,貌似没有多大的变化,因为我们的blog不识别markdown的table,而用最新模板new出的是没问题的,因此打算升个级。

目测应该10分钟的工作量,结果搞了2个小时。

复盘

然而事情总是预料的非常不准确,本文还原一下事发现场。

本地新建blog

第一步,创建新工程

lein new cryogen my-blog

第二步,把原blog里的posts和img拷贝到my-blog

第三步,启动

lein serve

这里,发现启动命令也改了,以前是lein ring server

本地一切顺利,浏览器打开localhost:3000,出现蓝色主题的blog。从原blog上复制出主题切换成【nucleus】,如愿以偿。

迁移到服务器

整个目录copy到linux服务器,启动,出错了

"Elapsed time: 751.989566 msecs"
2021-07-20 23:24:08.512:INFO:oejs.Server:jetty-7.6.13.v20130916
2021-07-20 23:24:08.535:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:3000
Started server on port 3000
Syntax error (HeadlessException) compiling at (/tmp/form-init7856530998871865073.clj:1:73).

No X11 DISPLAY variable was set, but this program performed an operation which requires it.

Full report at:
/tmp/clojure-4617941323880185994.edn

这个错的原因是打不开浏览器,因为linux上没有浏览器。

尝试解决

"Elapsed time: 766.25861 msecs"
2021-07-20 22:54:01.292:INFO:oejs.Server:jetty-7.6.13.v20130916
2021-07-20 22:54:01.315:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:3000
Started server on port 3000
Syntax error (AWTError) compiling at (/tmp/form-init8467355736696636285.clj:1:73).
Can't connect to X11 window server using ':0' as the value of the DISPLAY variable.

Full report at:
/tmp/clojure-1417895621846917199.edn

edn文件内

{:clojure.main/message
 "Syntax error (AWTError) compiling at (/tmp/form-init8467355736696636285.clj:1:73).\nCan't connect to X11 window server using ':0' as the value of the DISPLAY variable.\n",
 :clojure.main/triage
 {:clojure.error/phase :compile-syntax-check,
  :clojure.error/line 1,
  :clojure.error/column 73,
  :clojure.error/source "form-init8467355736696636285.clj",
  :clojure.error/path "/tmp/form-init8467355736696636285.clj",
  :clojure.error/class java.awt.AWTError,
  :clojure.error/cause
  "Can't connect to X11 window server using ':0' as the value of the DISPLAY variable."},
 :clojure.main/trace
 {:via
  [{:type clojure.lang.Compiler$CompilerException,
    :message
    "Syntax error compiling at (/tmp/form-init8467355736696636285.clj:1:73).",
    :data
    {:clojure.error/phase :compile-syntax-check,
     :clojure.error/line 1,
     :clojure.error/column 73,
     :clojure.error/source "/tmp/form-init8467355736696636285.clj"},
    :at [clojure.lang.Compiler load "Compiler.java" 7648]}
   {:type java.awt.AWTError,
    :message
    "Can't connect to X11 window server using ':0' as the value of the DISPLAY variable.",
    :at
    [sun.awt.X11GraphicsEnvironment
     initDisplay
     "X11GraphicsEnvironment.java"
     -2]}],
  :trace
  [[sun.awt.X11GraphicsEnvironment
    initDisplay
    "X11GraphicsEnvironment.java"
    -2]
   [sun.awt.X11GraphicsEnvironment
    access$200
   ...

后面的不粘贴了。

  • 尝试二:这一步把配置加在~/.bashrc/etc/bashrc里也是不起作用的。
    还有人说命令换成下面的可能起作用,都试过没有奏效的。
export DISPLAY=:0
export DISPLAY=localhost:0.0
export DISPLAY=localhost:1.0
export DISPLAY=":0.0"
  • 在启动命令加jvm参数
    因为异常是java.awt.HeadlessException, 查资料看具体是在project.clj里配置jvm参数
:jvm-opts ["-Djava.awt.headless=true"]

还是没有起作用。

  • 尝试三:配置:open-browser? false
    加载项目跟目录的project.clj
            :plugins [[lein-ring "0.12.5"]]
            :main cryogen.core
            :ring {:init cryogen.server/init
                   :handler cryogen.server/handler
                   :open-browser? false}
            :aliases {"serve"      ["run" "-m" "cryogen.server"]
                      "serve-fast" ["run" "-m" "cryogen.server" "fast"]}

没有起作用,还是headlessException。

解决

src/cryogen/server.clj里添加配置,在herering-server 处添加配置:open-browser? false
加上以后

(defn serve
  "Entrypoint for running via tools-deps (clojure)"
  [{:keys [fast] :as opts}]
  (ring-server/serve
    handler
    (merge {:init (partial init fast)
            :open-browser? false} opts)))

修改后执行lein serve,就不会默认打开浏览器了。

一个插曲

看到github上有deploying-your-site的介绍,上面启动失败的情况,虽然失败了,但是public目录下还是编译好了博客的html文件,于是用nginx代理了一下。

结果页面出来了,但是跟丢了样式一样不正常,本地很好复现。

看控制台出现hljs is not defined #238的错误,猜测跟code-syntax-highlighting, 没有深究放弃这个方案了。

赠送---修改端口

如果要修改端口,也是在src/cryogen/server.clj,将-main函数制定的port进行替换。

相关文章

网友评论

      本文标题:cryogen博客模板更新,阻止ring-server默认打开浏

      本文链接:https://www.haomeiwen.com/subject/yoxdmltx.html