Baffling undefined method error

I’m getting an error I can’t account for. In a method I’ve written I
open a file and access a yaml store:

archive_stored_list = ‘archive_stored_list.yml’
archives_stored_catalog = File.open(archive_stored_list) {|i|
YAML.load(i)}

I massage the data a bit, and want to write it back out to the same
file. I try to close the file so I can open it for output, but get an
error:

archives_stored_catalog.close # <= “undefined method `close’” error is
written to log file here
open(archive_stored_list,“w”) {|i|
YAML.dump(archives_stored_catalog,i)}

Why is this giving an error? Isn’t the IO.close method always available?
Very confusing.

This usage is straight out of Programming Ruby 2nd edition, but it
doesn’t work for me, and I can’t see the error.

Would appreciate any help.

Tom

Tom C., MS MA, LMHC
Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< [email protected] >> (email)
<< TomCloyd.com >> (website & psychotherapy weblog)
<< sleightmind.wordpress.com >> (mental health issues weblog)
<< directpathdesign.com >> (web site design & consultation)

Hi –

On Sat, 15 Mar 2008, Tom C. wrote:

written to log file here
open(archive_stored_list,“w”) {|i| YAML.dump(archives_stored_catalog,i)}

Why is this giving an error? Isn’t the IO.close method always available? Very
confusing.

This usage is straight out of Programming Ruby 2nd edition, but it doesn’t
work for me, and I can’t see the error.

When you use a block with File.open, the filehandle is closed
automatically when the block exits. There’s no point even saving it,
because the value of the whole operation will be nil.

David

Tom C. wrote:

Would appreciate any help.

Tom

If I do NOT try to close the file (and in all the examples I’ve found,
this isn’t done - I just see an open to read, followed by another open
to write), I get a “Permission denied - archive_stored_list.yml”
message. That makes no sense. There CAN’T be a permission problem. I
just READ the file.

I await higher wisdom.

t.

Tom C., MS MA, LMHC
Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< [email protected] >> (email)
<< TomCloyd.com >> (website & psychotherapy weblog)
<< sleightmind.wordpress.com >> (mental health issues weblog)
<< directpathdesign.com >> (web site design & consultation)

On Mar 15, 2008, at 8:24 AM, Tom C. wrote:

archives_stored_catalog.close # <= “undefined method `close’” error
is written to log file here
open(archive_stored_list,“w”) {|i|
YAML.dump(archives_stored_catalog,i)}

Why is this giving an error? Isn’t the IO.close method always
available? Very confusing.

The block form of IO.open returns the value of the block. So, what is
the class of archives_stored_catalog? It isn’t an IO object. It’s your
loaded YAML data. So it doesn’t have a close method.

Regards

Dave T.

Hi –

On Sat, 15 Mar 2008, Dave T. wrote:

try to close the file so I can open it for output, but get an error:
class of archives_stored_catalog? It isn’t an IO object. It’s your loaded
YAML data. So it doesn’t have a close method.

Yeah, that :slight_smile: (I said nil, which was an over-generalization from a
case where the block called puts.)

David

David A. Black wrote:

archive_stored_list = ‘archive_stored_list.yml’
YAML.dump(archives_stored_catalog,i)}
case where the block called puts.)

David

OK, thanks, that’s very clarifying. I utterly missed the fact that I was
using a block open. So, once the data’s loaded, the file should be
closed, and thus available for re-openning.

But it isn’t. THAT was my original problem - the reason I was
(mistakenly) trying to close it - so I could open it. All this code is
in the same method. “archive_stored_list” should be something I can
open, but as I said before, upon trying I get a “Permission denied -
archive_stored_list.yml” error. I have NO idea why. If I can’t open that
file, I can’t dump my yaml data.

Any ideas?

t.

Tom C., MS MA, LMHC
Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< [email protected] >> (email)
<< TomCloyd.com >> (website & psychotherapy weblog)
<< sleightmind.wordpress.com >> (mental health issues weblog)
<< directpathdesign.com >> (web site design & consultation)

On 15-Mar-08, at 9:33 AM, Tom C. wrote:

an error:
doesn’t work for me, and I can’t see the error.

I await higher wisdom.

Don’t count on it from me, but do you have write permission on the file?

Cheers,
Bob

<< TomCloyd.com >> (website & psychotherapy weblog) <<
sleightmind.wordpress.com >> (mental health issues weblog)
<< directpathdesign.com >> (web site design & consultation)




Bob H. – tumblelog at
http://www.recursive.ca/so/
Recursive Design Inc. – weblog at
http://www.recursive.ca/hutch
http://www.recursive.ca/ – works on
http://www.raconteur.info/cms-for-static-content/home/

Tom C. wrote:

But it isn’t. THAT was my original problem - the reason I was
(mistakenly) trying to close it - so I could open it. All this code is
in the same method. “archive_stored_list” should be something I can
open, but as I said before, upon trying I get a “Permission denied -
archive_stored_list.yml” error. I have NO idea why. If I can’t open that
file, I can’t dump my yaml data.

Close the editor reading it? Something is blocking your write access,
and it looks like an OS “error”, rather than a Ruby error.

  • Phillip G.

Bob H. wrote:

available? Very confusing.
another open to write), I get a “Permission denied -
archive_stored_list.yml” message. That makes no sense. There CAN’T be
a permission problem. I just READ the file.

I await higher wisdom.

Don’t count on it from me, but do you have write permission on the file?

Cheers,
Bob

Yes I sure do.

~t .

Tom C., MS MA, LMHC
Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< [email protected] >> (email)
<< TomCloyd.com >> (website & psychotherapy weblog)
<< sleightmind.wordpress.com >> (mental health issues weblog)
<< directpathdesign.com >> (web site design & consultation)

On Sat, Mar 15, 2008 at 8:33 AM, Tom C. [email protected] wrote:

error:

archives_stored_catalog.close # <= “undefined method `close’” error is
written to log file here
open(archive_stored_list,“w”) {|i| YAML.dump(archives_stored_catalog,i)}

The File.open block version automagically closes the file.

Todd

On 15-Mar-08, at 10:22 AM, Tom C. wrote:

Cheers,
Bob

Yes I sure do.

Can post the write code?

Cheers,
Bob


Bob H. – tumblelog at
http://www.recursive.ca/so/
Recursive Design Inc. – weblog at
http://www.recursive.ca/hutch
http://www.recursive.ca/ – works on
http://www.raconteur.info/cms-for-static-content/home/

Phillip G. wrote:

and it looks like an OS “error”, rather than a Ruby error.

  • Phillip G.

Thanks Phillip - that redirected my attention. It turns out, amazingly
enough, that you cannot open a file in a directory where it isn’t! I
wasn’t paying enough attention to my present working directory - it got
changed, and I didn’t change it back. Doing so fixed the problem.
Another first - never had that problem before.

t.

Tom C., MS MA, LMHC
Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< [email protected] >> (email)
<< TomCloyd.com >> (website & psychotherapy weblog)
<< sleightmind.wordpress.com >> (mental health issues weblog)
<< directpathdesign.com >> (web site design & consultation)