2012-10-26 11 views
6

Ich habe WebMatrix installiert und folgte these Anweisungen, um IIS 7 auf meinem Windows 7-Computer zu installieren.Fehler beim Ausführen der Knoten-App in WebMatrix

Wenn ich auf 'Ausführen' meine ausdrückliche Knoten App laufen, der Browser öffnet sich und sagt mir

The iisnode module is unable to start the node.exe process. Make sure the node.exe executable is available at the location specified in the system.webServer/iisnode/@nodeProcessCommandLine element of web.config. By default node.exe is expected to be installed in %ProgramFiles%\nodejs folder on x86 systems and %ProgramFiles(x86)%\nodejs folder on x64 systems.

Hier ist meine web.config:

<configuration> 
<system.webServer> 

<handlers> 
    <!-- indicates that the app.js file is a node.js application to be handled by the iisnode module --> 
    <add name="iisnode" path="app.js" verb="*" modules="iisnode" /> 
</handlers> 

<rewrite> 
    <rules> 
    <!-- Don't interfere with requests for logs --> 
    <rule name="LogFile" patternSyntax="ECMAScript" stopProcessing="true"> 
     <match url="^[a-zA-Z0-9_\-]+\.js\.logs\/\d+\.txt$" /> 
    </rule> 

    <!-- Don't interfere with requests for node-inspector debugging --> 
    <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true"> 
     <match url="^app.js\/debug[\/]?" /> 
    </rule> 

    <!-- First we consider whether the incoming URL matches a physical file in the /public folder --> 
    <rule name="StaticContent"> 
     <action type="Rewrite" url="public{REQUEST_URI}" /> 
    </rule> 

    <!-- All other URLs are mapped to the Node.js application entry point --> 
    <rule name="DynamicContent"> 
     <conditions> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True" /> 
     </conditions> 
     <action type="Rewrite" url="app.js" /> 
    </rule> 
    </rules> 
</rewrite> 

<!-- You can control how Node is hosted within IIS using the following options --> 
<!--<iisnode  
     node_env="%node_env%" 
     nodeProcessCountPerApplication="1" 
     maxConcurrentRequestsPerProcess="1024" 
     maxNamedPipeConnectionRetry="3" 
     namedPipeConnectionRetryDelay="2000"  
     maxNamedPipeConnectionPoolSize="512" 
     maxNamedPipePooledConnectionAge="30000" 
     asyncCompletionThreadCount="0" 
     initialRequestBufferSize="4096" 
     maxRequestBufferSize="65536" 
     watchedFiles="*.js" 
     uncFileChangesPollingInterval="5000"  
     gracefulShutdownTimeout="60000" 
     loggingEnabled="true" 
     logDirectoryNameSuffix="logs" 
     debuggingEnabled="true" 
     debuggerPortRange="5058-6058" 
     debuggerPathSegment="debug" 
     maxLogFileSizeInKB="128" 
     appendToExistingLog="false" 
     logFileFlushInterval="5000" 
     devErrorsEnabled="true" 
     flushResponse="false"  
     enableXFF="false" 
     promoteServerVars="" 
    />--> 

    <iisnode  
    nodeProcessCommandLine="&quot;%programfiles%\nodejs\node.exe&quot;" 
    interceptor="&quot;%programfiles%\iisnode\interceptor.js&quot;" 
    /> 
</system.webServer> 
</configuration> 

Was ist der Grund dafür Problem, und wie repariere ich es?

Antwort

10

Dies ist ein häufiges Problem, wenn Sie die x64-Version von Knoten von der Website installiert haben. Derzeit ist IISNode so eingerichtet, dass es node.exe vom x32-Pfad liest. Sie können entweder nodeProcessCommandLine ändern, um den vollständigen Pfad zu node.exe in Ihrer Box zu verwenden, oder die Installation des 32-Bit-Knotens installieren. Wir arbeiten daran, dies zu beheben, so dass beide 32/64 Bit funktionieren werden. Lassen Sie mich wissen, ob dies erweist sich nicht das Problem sein :)

+1

Ist '" "% programfiles% \ nodejs \ node.exe " "' nicht der vollständige Pfad? –

+1

Ich habe die 32-Bit-Version installiert und ja - es funktioniert jetzt. Vielen Dank Justin. –

+2

Ich hatte das gleiche Problem und alle Korrekturen (Installation von x86 oder Bearbeiten von web.config oder die Platzierung eines Symlinks) hier und andere Orte ohne Erfolg angewendet. Es stellt sich heraus, dass Sie WAS mit den folgenden Befehlen von Powershell oder der Eingabeaufforderung erneut starten müssen: "net stop war" & "net start w3svc" Sobald ich diese Befehle ausgeführt wurde, funktionierte der Fix. Ich fand dieses auf der Problemseite für diesen spezifischen Fehler: https://github.com/tjanczuk/iisnode/issues/302 – Conor

21

mit node.js (64-Bit), versuchen Sie dies von web.config am Boden platzieren

<iisnode watchedFiles="*.js;node_modules\*;routes\*.js;views\*.jade" 
nodeProcessCommandLine="\program files\nodejs\node.exe"/> 
+2

Das hat bei mir funktioniert - danke – markbarton

+0

Das hat mir auch geholfen. Die Umgebungsvariable%% ProgamFiles% scheint nicht zu expandieren. Hardcoding der Wert in dort arbeitete. –

+0

danke für info, arbeite wie ein charme! –

6

Statt die 32 installieren -bit-Version können Sie eine symbolische Verbindung vom 32-Bit-Pfad zum 64-Bit-Pfad erstellen.

Am cmd.exe prompt:

mklink /D "C:\Program Files (x86)\nodejs" "C:\Program Files\nodejs" 

raschend, dass diese noch nicht festgelegt ist und die web.config Einstellung scheint ignoriert werden.