2012-04-24 5 views
10

J'ai développé une application ASP.Net MVC 3 qui utilise RavenDB Embedded comme magasin de sauvegarde intégré pour les données. J'ai utilisé le tutoriel this pour commencer à créer une application MVC avec RavenDB Embedded. Je suis en mesure de l'exécuter très bien sur mon PC de développement, mais quand il est venu le temps de le déployer sur notre serveur Windows Server 2003 en cours d'exécution IIS6 jetai l'erreur suivante:Problème de déploiement de RavenDB

Cannot access file, the file is locked or in use Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: Microsoft.Isam.Esent.Interop.EsentFileAccessDeniedException: Cannot access file, the file is locked or in use

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[EsentFileAccessDeniedException: Cannot access file, the file is locked or in use] Microsoft.Isam.Esent.Interop.Api.Check(Int32 err) in C:\Work\ravendb\SharedLibs\Sources\managedesent-61618\EsentInterop\Api.cs:2736 Raven.Storage.Esent.TransactionalStorage.Initialize(IUuidGenerator uuidGenerator) in c:\Builds\RavenDB-Stable\Raven.Storage.Esent\TransactionalStorage.cs:207

[InvalidOperationException: Could not open transactional storage: C:\inetpub\wwwroot\MyApp\App_Data\Database\RavenDB\Data]
Raven.Storage.Esent.TransactionalStorage.Initialize(IUuidGenerator uuidGenerator) in c:\Builds\RavenDB-Stable\Raven.Storage.Esent\TransactionalStorage.cs:222 Raven.Database.DocumentDatabase..ctor(InMemoryRavenConfiguration configuration) in c:\Builds\RavenDB-Stable\Raven.Database\DocumentDatabase.cs:185
Raven.Client.Embedded.EmbeddableDocumentStore.InitializeInternal() in c:\Builds\RavenDB-Stable\Raven.Client.Embedded\EmbeddableDocumentStore.cs:143 Raven.Client.Document.DocumentStore.Initialize() in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Document\DocumentStore.cs:496 MyApp.CompositionRoot.CreateControllerFactory() in ...\MyApp\CompositionRoot.cs:36 MyApp.CompositionRoot..ctor() in ..\MyApp\CompositionRoot.cs:17
MyApp.MvcApplication.Application_Start() in ...MyApp\Global.asax.cs:38

[HttpException (0x80004005): Could not open transactional storage: C:\inetpub\wwwroot\MyApp\App_Data\Database\RavenDB\Data]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +3985477
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +191
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +325
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +407
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375

[HttpException (0x80004005): Could not open transactional storage: C:\inetpub\wwwroot\MyApp\App_Data\Database\RavenDB\Data]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11524352 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4782309

La source de l'erreur la classe CompositionRoot.cs référencée est lors de l'initialisation du magasin de documents intégrable. Pourquoi cela se passe-t-il uniquement sur le serveur Web et non sur mon PC de développement? Pourquoi? Je ne suis pas sûr de la cause exacte. Toute aide est appréciée.

+0

ressemble à un problème d'autorisations classique s'exécutant sous IIS. Aucun familier avec RavenDB incorporé, mais je voudrais le déplacer en dehors de \ webroot et donner les privilèges de l'utilisateur IIS à ce chemin. – kenny

+0

RavenDB fonctionne-t-il déjà en tant que service ou depuis la ligne de commande? – wal

Répondre

15

Cela s'est avéré être un problème d'autorisations, j'ai donné au groupe IIS_IUSRS des autorisations de modification et d'écriture sur la racine du dossier de mon application et lui a donné les permissions nécessaires pour initialiser correctement la base de données. Il y a probablement un dossier spécifique dans la racine auquel il a besoin d'un accès de modification/écriture (dans mon cas, probablement le dossier App_Data, puisque c'est là que j'instancie mon instance de RavenDB). Je vais devoir tester car je ne voudrais pas qu'un utilisateur ait des droits de modification/écriture sur l'ensemble du dossier de l'application.

4

Vous devez vous assurer que votre CreateControllerFactory s'exécutera une seule fois, même en cas de demandes simultanées au démarrage de l'application.

+0

Merci Ayende, l'erreur s'est avérée être un problème d'autorisations. J'ai donné l'accès en écriture et en modification du dossier racine de mon application au groupe IIS_IUSRS et cela a permis à la base de données de s'initialiser correctement. Je garderai également votre réponse à l'esprit au cas où le problème se poserait à nouveau. Un travail fantastique sur RavenDB, c'est notre première aventure dans une base de données non relationnelle, nous sommes donc impatients de voir comment cela fonctionne. – kingrichard2005