Forum: Ruby Dir.foreach() crash

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
8812d2385b477f8fbbe37f22c40b18c5?d=identicon&s=25 unknown (Guest)
on 2009-02-04 20:05
(Received via mailing list)
I continue to have a crash with a script I've written that recurses
through a disk calling foreach() as needed on directories.

I am getting the following error:

D:/BackupScripts/trimMachines.rb:130:in `open': Invalid argument - x:\.
\data\dubinin\vmap\v1180\soamafr\lib_180\trans\k\f\g\e (Errno::EINVAL)
        from D:/BackupScripts/trimMachines.rb:130:in `foreach'
        from D:/BackupScripts/trimMachines.rb:130:in `trimDirectory'
        from D:/BackupScripts/trimMachines.rb:135:in `trimDirectory'
        from D:/BackupScripts/trimMachines.rb:130:in `foreach'
        from D:/BackupScripts/trimMachines.rb:130:in `trimDirectory'
        from D:/BackupScripts/trimMachines.rb:135:in `trimDirectory'
        from D:/BackupScripts/trimMachines.rb:130:in `foreach'
        from D:/BackupScripts/trimMachines.rb:130:in `trimDirectory'
         ... 31 levels...
        from D:/BackupScripts/trimMachines.rb:193:in `trimMachines'
        from D:/BackupScripts/trimMachines.rb:178:in `foreach'
        from D:/BackupScripts/trimMachines.rb:178:in `trimMachines'
        from D:/BackupScripts/trimMachines.rb:244

I've checked and the directory mentioned does exist, the user account
has full access to the directory, the directory is not empty, the
directory name is < 255 chars long, etc.

This script works for millions of files with directories that have
much longer names and many more subdirectories than this example
failure. The failures happen routinely after a few days of running the
script and always on different directories.

I am running Ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] on
Windows Server 2003 64 bit.

Does anyone have a clue what the problem could be? Is this a Ruby bug?
54404bcac0f45bf1c8e8b827cd9bb709?d=identicon&s=25 7stud -- (7stud)
on 2009-02-05 02:19
unknown wrote:
> I am getting the following error:
>
> D:/BackupScripts/trimMachines.rb:130:in `open': Invalid argument - x:\.
> \data\dubinin\vmap\v1180\soamafr\lib_180\trans\k\f\g\e (Errno::EINVAL)
>
> I've checked and the directory mentioned does exist, the user account
> has full access to the directory, the directory is not empty, the
> directory name is < 255 chars long, etc.
>
> This script works for millions of files with directories that have
> much longer names and many more subdirectories than this example
> failure. The failures happen routinely after a few days of running the
> script and always on different directories.
>
> Does anyone have a clue what the problem could be? Is this a Ruby bug?

Forward slashes are dangerous in strings because things like \v are
escape characters?
3131fcea0a711e5ad89c8d49cc9253b4?d=identicon&s=25 Julian Leviston (Guest)
on 2009-02-05 03:01
(Received via mailing list)
You mean backslashes. Yeah, use File::SEPARATOR or just use explicit
strings - ie single quoted

Blog: http://random8.zenunit.com/
Learn rails: http://sensei.zenunit.com/
54404bcac0f45bf1c8e8b827cd9bb709?d=identicon&s=25 7stud -- (7stud)
on 2009-02-05 04:40
Julian Leviston wrote:
> You mean backslashes.

Whoops.
8812d2385b477f8fbbe37f22c40b18c5?d=identicon&s=25 unknown (Guest)
on 2009-02-05 16:10
(Received via mailing list)
On Feb 4, 8:00 pm, Julian Leviston <jul...@coretech.net.au> wrote:
>
> >> much longer names and many more subdirectories than this example
> > Posted viahttp://www.ruby-forum.com/.
>
>

All \'s in the script are entered as "\\". Like I said this script
works for millions of files. Its doubtful only one of them has a \v in
it. Also this script will not always fail on this directory which says
this is not the problem.

This is not the first problem I have had with Ruby on this (64 bit)
machine. If I run the two backup/trim scripts I have written at system
startup they eventually quit and I can't see the error messages
because they have no visible console. If I run them from consoles
explicitly the backup script never terminates and the trim script dies
after a few days.

Is it possible that the two scripts are accessing the directory at the
same time and somehow that is causing some kind of interference? The
backup script would be creating directories and putting files in them.
So the trim should not be thrown off. If in the trim script a previous
Dir.foreach in the parent directory found this directory then the
Dir.foreach in the child should certainly find the directory. Again
this seems like a Ruby bug.
54404bcac0f45bf1c8e8b827cd9bb709?d=identicon&s=25 7stud -- (7stud)
on 2009-02-05 16:42
unknown wrote:
> I am running Ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] on
> Windows Server 2003 64 bit.
>
> Does anyone have a clue what the problem could be? Is this a Ruby bug?
>

It sounds like it may be a window's bug:


http://74.125.95.132/search?q=cache:_COKWkzEXhUJ:p...
8812d2385b477f8fbbe37f22c40b18c5?d=identicon&s=25 unknown (Guest)
on 2009-02-05 19:45
(Received via mailing list)
On Feb 5, 9:41 am, 7stud -- <bbxx789_0...@yahoo.com> wrote:
> Posted viahttp://www.ruby-forum.com/.
Thanks for the pointer. I am not running Rails/Mongrel. Just ruby
scripts that manipulate files on a server on Windows. So I don't know
if this is the problem but it does give me testable solutions.

FYI the described problem at that URL is not a Windows bug. Its a Ruby
(or Mongrel) on Windows bug.
This topic is locked and can not be replied to.