【发布时间】:2011-12-04 11:49:46
【问题描述】:
我有一个 clojure 程序,它有时会执行一个名为 db-rebuild-files-table 的函数。
此函数将目录文件名作为单个字符串参数并调用递归函数,该函数下降到目录文件树中,从那里的文件中提取某些数据并将每个文件记录在 mysql 数据库中。此命令的最终结果是一个“文件”表,其中包含给定目录下树中的所有文件。
我需要的是能够从 shell 定期运行这个命令。
所以,我在包含我的-main 函数的文件中添加了:gen-class 指令,该函数实际上调用了(db-rebuild-files-table *dirname*)。我运行 lein uberjar 并生成一个 jar,然后我可以使用它来执行:
java -jar my-project-SNAPSHOT-1.0.0-standalone.jar namespace.containing.main
果然,函数运行了,但在数据库中只存在一个条目,用于目录 *dirname*。当我在 clojure REPL 中执行 exact same sexp 时,我得到了正确的行为: *dirname* 下的 all the file tree 得到处理。
我做错了什么?为什么调用 (db-rebuild-files-table *dirname*) 从 REPL 调用和从命令行执行时行为不一致?
[编辑] 更奇怪的是,我在任何地方都没有出错。所有函数调用似乎都可以正常工作。我什至可以在 REPL 中运行 -main 函数,它会正确更新表。
【问题讨论】:
-
您使用的是哪个版本的 Clojure?
标签: jdbc clojure read-eval-print-loop