gpt4 book ai didi

sqlite - Migratus : java. lang.Character 无法转换为 clojure.lang.Named

转载 作者:行者123 更新时间:2023-12-02 11:54:40 26 4
gpt4 key购买 nike

编辑2

Yogthos 昨天推送了 Migratus 0.8.14,它看起来已经解决了 jdbc API 的更改。但它还没有出现在 Clojars 上。一旦我弄清楚如何构建新版本并将其放在我的类路径中,我会报告。

编辑

也许这与 clojure.java.jdbc 0.6.0 中的重大更改有关,除其他外,现在还需要

(clojure.java.jdbc/create-table-ddl 
:bar
[[:id :serial "primary key"] ; a vector rather than multiple arities
[:name :text]])

而不是

(clojure.java.jdbc/create-table-ddl
:bar
[:id :serial "primary key"]
[:name :text])

只是一个想法。

<小时/>

我正在尝试按照 https://github.com/yogthos/migratus 中的示例进行操作,但使用 SQLite [编辑:与 postgresql 存在同样的问题]。相关文件如下:

├── project.clj
├── resources
│   └── migrations
│   ├── 20160419231827-foo.down.sql
│   └── 20160419231827-foo.up.sql
├── src
│   └── foo
│   ├── core.clj
│   └── my-migrations.clj

project.clj 是这样的:

(defproject foo "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.8.0"]
[migratus "0.8.13"]
[org.clojure/java.jdbc "0.6.0-alpha2"]
[org.xerial/sqlite-jdbc "3.8.11.2"]
[org.slf4j/slf4j-log4j12 "1.7.9"]]
:main ^:skip-aot foo.core
:target-path "target/%s"
:profiles {:uberjar {:aot :all}})

my-migrations.clj 是这样的:

(ns foo.my-migrations
(:require [migratus.core :as migratus]))

(def config {:store :database
:migration-dir "migrations/"
:migration-table-name "foo_bar"
:db {:classname "org.sqlite.JDBC"
:subprotocol "sqlite"
:connection-uri "jdbc:sqlite:site.db"}})

(migratus/migrate config)

迁移文件逐字来自文档(文件名更新为当前日期/时间)。这会导致以下错误:

  Show: Clojure Java REPL Tooling Duplicates All  (12 frames hidden)

1. Unhandled java.lang.ClassCastException
java.lang.Character cannot be cast to clojure.lang.Named

core.clj: 1546 clojure.core/name
core.clj: 1540 clojure.core/name
jdbc.clj: 62 clojure.java.jdbc/as-sql-name
jdbc.clj: 51 clojure.java.jdbc/as-sql-name
jdbc.clj: 1090 clojure.java.jdbc/create-table-ddl/spec-to-string
core.clj: 2644 clojure.core/map/fn
LazySeq.java: 40 clojure.lang.LazySeq/sval
LazySeq.java: 49 clojure.lang.LazySeq/seq
LazySeq.java: 71 clojure.lang.LazySeq/first
RT.java: 667 clojure.lang.RT/first
core.clj: 55 clojure.core/first
string.clj: 180 clojure.string/join
string.clj: 180 clojure.string/join
jdbc.clj: 1094 clojure.java.jdbc/create-table-ddl
jdbc.clj: 1079 clojure.java.jdbc/create-table-ddl
jdbc.clj: 1084 clojure.java.jdbc/create-table-ddl
jdbc.clj: 1079 clojure.java.jdbc/create-table-ddl
database.clj: 227 migratus.database/init-schema!/fn
jdbc.clj: 591 clojure.java.jdbc/db-transaction*
jdbc.clj: 563 clojure.java.jdbc/db-transaction*
jdbc.clj: 576 clojure.java.jdbc/db-transaction*
jdbc.clj: 563 clojure.java.jdbc/db-transaction*
database.clj: 220 migratus.database/init-schema!
database.clj: 219 migratus.database/init-schema!
database.clj: 262 migratus.database.Database/connect
core.clj: 24 migratus.core/run
core.clj: 21 migratus.core/run
core.clj: 63 migratus.core/migrate
core.clj: 60 migratus.core/migrate
REPL: 11 foo.my-migrations/eval21297
REPL: 11 foo.my-migrations/eval21297
Compiler.java: 6927 clojure.lang.Compiler/eval
Compiler.java: 6890 clojure.lang.Compiler/eval
core.clj: 3105 clojure.core/eval
core.clj: 3101 clojure.core/eval
main.clj: 240 clojure.main/repl/read-eval-print/fn
main.clj: 240 clojure.main/repl/read-eval-print
main.clj: 258 clojure.main/repl/fn
main.clj: 258 clojure.main/repl
main.clj: 174 clojure.main/repl
RestFn.java: 1523 clojure.lang.RestFn/invoke
interruptible_eval.clj: 87 clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn
AFn.java: 152 clojure.lang.AFn/applyToHelper
AFn.java: 144 clojure.lang.AFn/applyTo
core.clj: 646 clojure.core/apply
core.clj: 1881 clojure.core/with-bindings*
core.clj: 1881 clojure.core/with-bindings*
RestFn.java: 425 clojure.lang.RestFn/invoke
interruptible_eval.clj: 85 clojure.tools.nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 55 clojure.tools.nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 222 clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
interruptible_eval.clj: 190 clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn
AFn.java: 22 clojure.lang.AFn/run
ThreadPoolExecutor.java: 1142 java.util.concurrent.ThreadPoolExecutor/runWorker
ThreadPoolExecutor.java: 617 java.util.concurrent.ThreadPoolExecutor$Worker/run
Thread.java: 745 java.lang.Thread/run

最佳答案

最终编辑(我希望):

Migratus 0.8.14 版现已发布在 Clojars 上。

<小时/>

这是因为 clojure.java.jdbc 版本 0.6.0 中的重大更改。 API 更改为要求 create-table-ddl 将表规范包装在单个向量中,而不是作为多个参数。 Yogthos 昨天用版本 0.8.13 → 0.8.14 修复了这个问题,请参阅 here 。 Clojars 没有 Migratus 版本 0.8.14(Migratus 自述文件仍然有 0.8.13)。所以我就这么做了

$> git clone https://github.com/yogthos/migratus
$> cd migratus
$> lein install

现在可以了。

关于sqlite - Migratus : java. lang.Character 无法转换为 clojure.lang.Named,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36733964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com