2017-09-03 16 views
1

で定義された実装を見つけることができませんREPLから対話的に使用された場合、またはlein runで開始された場合は、lein uberjarとなり、例外WS:レインuberjarたちは、プロトコルを持っている私たちのClojureのコードベースでのDeftype

Exception in thread "main" java.lang.ExceptionInInitializerError, compiling:(/tmp/form-init118199196859405970.clj:1:72) 
    ... 
Caused by: java.lang.ExceptionInInitializerError 
    ... 
Caused by: java.lang.IllegalArgumentException: No implementation of method: :index of protocol: #'project.repository/Repository found for class: project.mongo.MongoRepository 
    at clojure.core$_cache_protocol_fn.invokeStatic(core_deftype.clj:568) 
    at clojure.core$_cache_protocol_fn.invoke(core_deftype.clj:560) 
    at project.repository$fn__557$G__514__566.invoke(repository.clj) 
    at project.users__init.load(Unknown Source) 
    at project.users__init.<clinit>(Unknown Source) 

奇妙な部分が(index)(let)に呼び出されたときに、問題が消えることです:

(def users-storage 
    (let [u (mongo-repository mongo-db "leads")] 
    (index u [:key1 :key2] true) 
    u)) 

差が生じるかもしれないもの上の任意の考え?

+0

あなたはレインのuberjarとAOTコンパイルのをしようとしましたか? –

+0

@akondはい!これは、コードをコピーして質問に貼り付けるときに失われる必要があります。問題を修正しました。 – 0x60

+0

@minhtuannguyenそれは私たちがやっていることです。私たちは以下を持っています:aot:project.cljのすべてで、例外はaotコンパイル中にスローされます。 – 0x60

答えて

0

私はproject.mongo nsまたはproject.users nsをコンパイルするときにMongoDBに接続しようとしていると考えられます。これらの行は、おそらくかなりのコードがロードされるよりも、起動時に呼ばれています関数呼び出しでなければなりません:

(def mongo-db ((mg/connect-via-uri "mongodb://127.0.0.1/bots") :db)) 

(index users-storage [:key1 :key2] true) 
関連する問題