2010-10-12 3 views
0

J'ai écrit une petite application web interne que j'utilise pour importer des factures de notre base de données de jobcard dans MYOB. Je l'ai écrit en utilisant Clojure et Compojure, et ça fonctionne plutôt bien, et c'était aussi un bon exercice d'apprentissage pour moi.MYOB ODBC Pilote changeant le répertoire de travail en temp en utilisant Compojure

Cependant, j'ai un problème, il semble qu'après une importation de facture réussie, le serveur jetée ne servira plus le fichier CSS statique.

Le DEFROUTE est comme suit: (. Le fichier est juste css/default.css, il fonctionne parfaitement juste avant la première importation)

(defroutes static-routes 
    (GET ["/:filename" :filename #".*"] [filename] 
     (response/file-response filename {:root "public"}))) 

Maintenant, je pense que j'ai trouvé la problème, il semble que le pilote ODBC MYOB est en train de changer le répertoire de travail du serveur Jetty (et mon REPL), parce que quand j'entre ce qui suit dans le REPL:

(file-seq (File. ".")) 

je reçois une liste de mon Répertoire des fichiers temporaires, ce qui expliquerait pourquoi mon fichier CSS n'est plus trouvé.

La chose étrange est, si je fais:

(.getAbsolutePath (File. ".")) 

je reçois le bon répertoire de ma demande.

Est-ce que quelqu'un sait quelque chose (autre que le codage dans un chemin absolu) qui peut contourner cette bizarrerie du pilote MYOB ODBC?

Je suppose que je pourrais juste saisir et stocker le chemin absolu quand je démarre, mais cela fonctionnerait-il avec un uberjar?

Éditer: Il semble qu'il est impossible de corriger en raison des limitations de la JVM?

How do I change directory in command line with Clojure?

+0

La chose étrange est en effet étrange. les appels file-seq (.d (listFiles)). Si vous appelez (. (File. ".") ListFiles) quel répertoire avez-vous? –

+0

Je reçois la liste du répertoire temporaire. (seq. (Fichier. ".) (listFiles))). Cependant, il dit toujours que absolutePath est le répertoire correct, donc je ne sais pas ce qui se passe là-bas ... – Mike

Répondre

0

Il ne semble pas vraiment beaucoup qui peut être fait à ce sujet. Il semble juste que le pont MYOB ODBC est juste mauvais. Donc, pour contourner cela, j'ai remplacé mes appels de fichiers relatifs pour utiliser .getAbsolutePath.

par exemple.

(java.io.File. (.getAbsolutePath (java.io.File. "templates/index.html"))) 

J'ai aussi changé il demande de fichiers si statiques utilisez un chemin de fichier absolu:

(defroutes static-routes 
    (GET ["/:filename" :filename #".*"] [filename] 
     (response/file-response filename {:root (.getAbsolutePath (java.io.File. "public"))}))) 

Je ne viens pas essayé de créer un uberjar, donc je pense que je pourrais avoir des problèmes là-bas.


Juste une mise à jour cela, en utilisant la fonction des ressources de Compojure semble ignorer tout à fait avec le problème, en travaillant sans problème lors de la création d'un UberJar.

donc je n'ai plus « statiques-routes » définis plus, j'utiliser simplement:

(route/resources "/") 

Et que les fichiers dans mon ressources/répertoire public dans le répertoire racine de mon projet.

Questions connexes