其目的是极其宽松地接受补丁。对于提交权限,只需提交您的第一个拉取请求或在Arc 语言论坛上提问即可。
首先安装Racket (v7.7 或更高版本),然后在终端中运行:
$ raco pkg install sha
$ git clone http://github.com/arclanguage/anarki
$ cd anarki
您可以使用以下命令启动交互式 repl:
$ ./arc.sh
或者以以下方式开始新闻(和回复):
$ cd apps/news
$ ./run-news
如果您是Arc或Lisp新手,教程是一个很好的起点。
如果遇到麻烦,请检查
(help)
Anarki与News捆绑在一起,这是一款黑客新闻风格的应用程序。
要运行News ,首先选择您(管理员)的用户名,
$ cd anarki/apps/news
$ mkdir www
$ echo __username__ > www/admins
您可以有多个管理员。将它们全部添加到www/admins
中,并用空格分隔。
警告:如果您已经在运行新闻网站,迁移到此分支可能会弄乱您网站的数据。先来和我们谈谈,迁移前一定要做好备份。
现在启动服务器,
$ ./run-news
服务器加载时会暂停,并显示一些消息,然后您将看到arc>
提示符。
转到 http://localhost:8080。单击登录,然后为您的用户名创建帐户。您现在应该以管理员身份登录。
(不用担心user break
或error writing
。)
要自定义News ,请更改apps/news/news.arc
顶部的变量。要更改服务器运行的端口,请修改apps/news/run-news.arc
。
对提示的任何交互式更改都将立即反映在服务器中,无需重新启动服务器。因此,如果您对apps/news/news.arc
进行任何更改,您可以通过在 repl 中键入(load "apps/news/news.arc")
来加载它们。如果您停止服务器或服务器由于某种原因死机,则先前输入的命令将在命令历史记录中可用(至少如果您安装了Readline )。
您可能希望通过HTTPS安全地提供新闻服务。使用SSL运行Nginx作为新闻反向代理的示例配置可以在anarki/extras/news.nginx.conf
中找到。
要发送密码重置邮件,您必须设置一个电子邮件帐户来发送这些邮件,
$ echo "[email protected]" > www/app-email ; email
$ echo "smtp.example.com" >> www/app-email ; smtp server
$ echo "[email protected]" >> www/app-email ; user
$ echo "1234" >> www/app-email ; password
Anarki拥有彻底的自动化测试。
# start in the anarki directory
$ ./arc.sh
arc> (load "tests.arc")
Anarki显然不受限于保持与上游版本的兼容性,并且兼容性状态可能会根据谁感兴趣而在不同提交之间大幅波动。要查看不同之处的列表,请在 repl 中键入(incompatibilities)
。如果您进行了不兼容的更改,请更新此列表。
欢迎任何人对 Anarki 进行更改,但请确保测试继续通过。由于我们依赖于 unit-test.arc 测试工具,因此请在提交任何更改之前运行其测试:
$ ./arc.sh (require 'lib/unit-test.arc/unit-test.arc) (load "unit-test.arc/tests.arc") (失败时的测试和错误)
Racket表达式可以使用($ ...)
语法进行计算。例如, (($ crypto-random-bytes) 16)
从Racket获取crypto-random-bytes
函数并调用它。
如果您编写了大量Racket代码,并且只想将Anarki用于更大项目的一部分,您可以raco pkg install anarki
并使用Anarki编写Racket模块:
#lang anarki
(:provide function-for-use-in-racket)
(= racket-import ($.dynamic-require ...))
(load "relative/path.arc")
(def utility-for-use-in-racket (x)
(* x (racket-import x))
请注意, Anarki没有私有模块作用域; (:provide ...)
部分只是为了让您可以轻松地从Racket require
基于Anarki的库。
Anarki在将关键字参数传递给Racket函数时遇到一些问题,但Racket的keyword-apply
可以用于此目的。