Skip to content

Instantly share code, notes, and snippets.

@Jonke
Created March 7, 2013 07:17
Show Gist options
  • Save Jonke/5106160 to your computer and use it in GitHub Desktop.
Save Jonke/5106160 to your computer and use it in GitHub Desktop.
Hur man fixade till haskell mongodbdriver för windows när hackage hade en version som bara gick på linux
posterous
« Back to blog
Viewed 227 times
About Me
Haskell, Erlang, C, Ruby
Subscribe via RSS
MongoDB och Haskell
Vissa saker är så enkla att närman väl kommer på det så är det snarast pinsamt att tala om att man inte fattade det direkt.
Problemet är ju att när man sen glömmer bort det enkla så får man börja om från början så därför noterar jag det här.
Du envisas med att köra windows med ghc 6.10.4 och vill nu använda din mongoDB för sakens skull.
Du hittar ett packet på Hackage som är bindings för mongoDB, det är alfa och dessutom för ghc 6.12, detta avskräcker dock inte utan huvudstupa försöker du ändå använda det.
Snabbt försöker du köra cabal install mongoDB, hittar inget, nehe.
Updatera cabal då, cabal update ger att man bör uppdatera sin cabal.
Så då gör vi det då: cabal install cabal-install
Igen cabal update ser bättre ut.
Nu då: cabal install mongoDB, nu börjar det rassla för att (eftersom detta är en windows maskin) klaga på att nano-md5 inte kan installeras.
Så då provar vi med bara cabal install nano-md5 och nu får vi plötsligt vettiga felmeddelanden.
Vi saknar en massa crypto lib och md5.h saker, ha lätt åtgärdat.
Hämta developers files och extrahera ut i c:\openssl.
nu får vi köra cabal lite annorlunda cabal install nano-md5 --extra-include-dirs=C:\openssl\include --extra-lib-dirs=C:\openssl\lib
nu är nano-md5 inne så då återvänder vi till
cabal install mongoDB
och nu händer betydligt mer, ända till vi får det otroligt jobbiga
Database\MongoDB.hs:328:9:
Type constructor `Exception' used as a class
In the instance declaration for `Exception MongoDBInternalError'
hmm, detta har vi råkat ut för tidigare, hur var det nu?... pragma , language extension TypeSynomInstances osv .... (Exception mellan ghc versionerna är en snabb liten rackare)
Det jag tror händer här är att base-3 används och inte base-4 som har de nya Control.Exception sakerna
cabal install -v --constraint="base>=4" mongoDB
men det fungerar av någon anledning inte, fortfarande används base-3
hmm, skam den som ger sig.....
cabal fetch mongoDB
cabal unpack mongoDB
cd mongoDB-0.3
in med mongoDB.cabal i emacs och ändra kravet på base<5 till base >=4, spara
cabal configure
cabal build
cabal install
Jaha nu har vi det, fungerar det ?
Vi följer den tutorial som finns på http://github.com/srp/mongoDB/blob/master/tutorial.md
$ mongod
Start up a haskell repl:
$ ghci
> import Database.MongoDB> import Database.MongoDB.BSON
> con <- connect "127.0.0.1" []
Om man nu får det där jobbiga
<command line>: user specified .o/.so/.DLL could not be loaded (addDLL: could n
t load DLL)
Så har man inte libeay32.dll (som jag dessutom kopierat och döpt till libcrypto.dll) i någon sökbar path.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment