Forum: Ruby filelocking

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.
F6a3dfee23741adec521eff5fa003aa0?d=identicon&s=25 Derek Smith (derekbsmith)
on 2009-04-09 03:07
Hi All,

I have posted the same code b4, but could not find my original post,
however this is a different question.  I am a newb, so here I go.
Thank you!


This is my error:

$ ruby test.rb
test.rb:46: undefined method `flock' for main:Object (NoMethodError)
        from test.rb:45:in `open'
        from test.rb:45
        from test.rb:42:in `each'
        from test.rb:42

Here is my code:

#!/usr/bin/ruby -w

require 'ftools'
array1 = Dir.glob("*.log")
if ( array1.length >= 1 )
    array1.each { |file|
        File.copy(file, "#{file}.orig")
        if (File.size?(file) > FSIZE)
            File.open(file, 'r+') do |f|
                flock(f, File::LOCK_SH) do |f|
                f << "i got a lock"
                end
            end
        end
    }
else
    raise StandardError, "Array 'array1' has no values, logs will not be
rolled!"
end
47b1910084592eb77a032bc7d8d1a84e?d=identicon&s=25 Joel VanderWerf (Guest)
on 2009-04-09 03:15
(Received via mailing list)
Derek Smith wrote:
> test.rb:46: undefined method `flock' for main:Object (NoMethodError)
...
>             File.open(file, 'r+') do |f|
>                 flock(f, File::LOCK_SH) do |f|

That should be File.flock.
F6a3dfee23741adec521eff5fa003aa0?d=identicon&s=25 Derek Smith (derekbsmith)
on 2009-04-09 03:27
Joel VanderWerf wrote:
> Derek Smith wrote:
>> test.rb:46: undefined method `flock' for main:Object (NoMethodError)
> ...
>>             File.open(file, 'r+') do |f|
>>                 flock(f, File::LOCK_SH) do |f|
>
> That should be File.flock.


OK tried that...thx!, but now I am seeing

__STDERR__

test.rb:46: undefined method `flock' for File:Class (NoMethodError)
        from test.rb:45:in `open'
        from test.rb:45
        from test.rb:42:in `each'
        from test.rb:42

__CODE__

if ( array1.length >= 1 )
    array1.each { |file|
        File.copy(file, "#{file}.orig")
        if (File.size?(file) > FSIZE)
            File.open(file, 'r+') do |f|
                File.flock(f, File::LOCK_SH) do |f|
                f << "i got a lock"
                end
            end
        end
    }
else
    raise StandardError, "Array 'array1' has no values, logs will not be
rolled!"
end
47b1910084592eb77a032bc7d8d1a84e?d=identicon&s=25 Joel VanderWerf (Guest)
on 2009-04-09 03:36
(Received via mailing list)
Derek Smith wrote:
> Joel VanderWerf wrote:
>> Derek Smith wrote:
>>> test.rb:46: undefined method `flock' for main:Object (NoMethodError)
>> ...
>>>             File.open(file, 'r+') do |f|
>>>                 flock(f, File::LOCK_SH) do |f|
>> That should be File.flock.

sorry, my fault... should be

  f.flock(File::LOCK_SH) do
    ...
  end

Take a look at `ri flock` for details.
770048af205ed307b8cf35ae2282ee2f?d=identicon&s=25 Michael Malone (Guest)
on 2009-04-09 03:40
(Received via mailing list)
>         from test.rb:45
>         from test.rb:42:in `each'
>         from test.rb:42
>
>
File#flock => f.flock

=======================================================================
This email, including any attachments, is only for the intended
addressee.  It is subject to copyright, is confidential and may be
the subject of legal or other privilege, none of which is waived or
lost by reason of this transmission.
If the receiver is not the intended addressee, please accept our
apologies, notify us by return, delete all copies and perform no
other act on the email.
Unfortunately, we cannot warrant that the email has not been
 altered or corrupted during transmission.
=======================================================================
This topic is locked and can not be replied to.