Help!
I’ve been working with Meteor for about two months now, and everything is going swimmingly in my OSX home environment. But I recently brought some of that code into our Windows 7 environment at work, and Meteor isn’t behaving the same on Windows.
Specifically, code bundling keeps getting borked. When I make changes to the code base, instead of flushing the old .meteor/local directory, and rebundling the application, it’s barfing a ENOTEMPTY exception at me in the server console. If I halt the mongod process in Task Explorer and manually delete the .meteor/local directory, I can restart the application, and it will bundle and deploy the app with the new code changes.
Running on: http://localhost:3000/
No dependency info in bundle. Filesystem monitoring disabled.
Errors prevented startup:
Exception while bundling application:
Error: ENOTEMPTY, directory not empty 'c:\Users\Abigail\My Documents\GitHub\canvas tracker\.meteor\local\build\server'
at Object.fs.rmdirSync (fs.js:456:18)
at Object.module.exports.rm_recursive (c:\Program Files (x86)\Meteor\app\lib\files.js:256:10)
at c:\Program Files (x86)\Meteor\app\lib\files.js:254:15
at Array.forEach (native)
at Function._.each._.forEach (c:\Program Files (x86)\Meteor\lib\node_modules\underscore\underscore.js:79:11)
at Object.module.exports.rm_recursive (c:\Program Files (x86)\Meteor\app\lib\files.js:252:9)
at _.extend.write_to_directory (c:\Program Files (x86)\Meteor\app\lib\bundler.js:493:11)
at Object.exports.bundle (c:\Program Files (x86)\Meteor\app\lib\bundler.js:685:12)
at exports.run.restart_server (c:\Program Files (x86)\Meteor\app\meteor\run.js:615:26)
at c:\Program Files (x86)\Meteor\app\meteor\run.js:726:9
Please fix the problem and restart.
But it doesn’t do on-the-fly code changes and re-bundles anymore. 🙁 I’m also getting EPERM errors sometimes when I try launching the application.
Running on: http://localhost:3000/
No dependency info in bundle. Filesystem monitoring disabled.
Errors prevented startup:
Exception while bundling application:
Error: EPERM, operation not permitted 'c:\Users\Abigail\My Documents\GitHub\canvas-tracker\.meteor\local\.build.build'
at Object.fs.renameSync (fs.js:439:18)
at _.extend.write_to_directory (c:\Program Files (x86)\Meteor\app\lib\bundler.js:628:8)
at Object.exports.bundle (c:\Program Files (x86)\Meteor\app\lib\bundler.js:685:12)
at exports.run.restart_server (c:\Program Files (x86)\Meteor\app\meteor\run.js:615:26)
at c:\Program Files (x86)\Meteor\app\meteor\run.js:726:9
at Object.exports.launch_mongo (c:\Program Files (x86)\Meteor\app\lib\mongo_runner.js:146:5)
at exports.run.launch (c:\Program Files (x86)\Meteor\app\meteor\run.js:712:39)
at Server.exports.run (c:\Program Files (x86)\Meteor\app\meteor\run.js:770:5)
at Server.g (events.js:193:14)
at Server.EventEmitter.emit (events.js:90:17)
Please fix the problem and restart.
Any ideas on how to resolve this? I’m using Meteor 0.5.4 on Windows 7 Ultimate, SP1, x64.
Edit: I should mention that these errors occur whenever there’s an error in the code. In my OSX environment, if I have an error, the code will still compile, minify, and bundle, and the page might not render and I’ll get various Javascript errors in the Chrome console which I then have to debug. In my Win7 environment, I’m doing the exact same thing, but instead of compiling a semi-broken app that I can then debug in Chrome, it’s halting during the bundle process. In either case, there’s an error in my Javascript code (I know that much). But in OSX, it will still bundle and I can proceed to debugging. In Win7, I can’t get to the debugging step because of these ENOTEMPTY and EPERM exceptions…
Edit: And, yes, I’ve tried nuking the permissions on the entire project directory by giving Full Access to Everyone. That didn’t do the trick, unfortunately.
Okay, so with the help of Tom Wijsman, we managed to track down the issue. The short answer is that it was the GitHub Bash shell.
The long answer is that ENOTEMPTY and EPERM are caused by a directory not getting deleted correctly during the bundling process. The directory not getting deleted correctly was caused by the code using an exec() command, which passed the delete command off to a shell. Turned out I was using the GitHub Bash shell, which is case sensitive, unlike the standard Windows cmd.exe, which is case insensitive. The case sensitivity was causing the shell not to recognize the path that should be removed, thus not removing it, thus causing a break during the bundle process.
100x thanks to Rahul for finding the previous bug reports on this issue! You were the hero that found the needle in the haystack!