Load file into text field?


#1

Does anyone know if it is possible to load text from file into a text
field, and using ajax to upload the field so that when the file has
changed, the field will be updated automatically?

Thanks.


#2

On 2/3/07, Wai T. removed_email_address@domain.invalid wrote:

Does anyone know if it is possible to load text from file into a text
field, and using ajax to upload the field so that when the file has
changed, the field will be updated automatically?

The first bit is easy. “@text = File.read(filename)” in the
controller, and use it somewhere in your view to show it.

The second bit can be done in a couple of ways.

The easier one is to have the client poll the server for changes, and
send the new text when it has. Take a look at
periodically_call_remote with the :update option. If your file is
large, you’ll want to have the client send the timestamp of the most
recent version of the file it has received and check it to avoid
sending the whole file each time.

The harder way is to push the data out the client periodically. This
is a well-known problem without a straightforward solution AFAIK.
There’s a technique dubbed Comet, which is Flash-based. Or you could
try keeping the HTTP connection open somehow. I think this has been
discussed here recently; you could try searching the archives if this
interests you.


#3

Have a look here:

http://juggernaut.rubyforge.org/

I’ve only just seen it myself, so not sure if it’s what you want. I’ll
let
you decide!

-Nathan


#4

George O. wrote:

The first bit is easy. “@text = File.read(filename)” in the
controller, and use it somewhere in your view to show it.

The second bit can be done in a couple of ways.

The easier one is to have the client poll the server for changes, and
send the new text when it has. Take a look at
periodically_call_remote with the :update option. If your file is
large, you’ll want to have the client send the timestamp of the most
recent version of the file it has received and check it to avoid
sending the whole file each time.

The harder way is to push the data out the client periodically. This
is a well-known problem without a straightforward solution AFAIK.
There’s a technique dubbed Comet, which is Flash-based. Or you could
try keeping the HTTP connection open somehow. I think this has been
discussed here recently; you could try searching the archives if this
interests you.

Thanks a lot. Polling the server for changes and send the entire new
text isn’t very efficient if the file is large. Can ruby read from a
fifo pipe? And is it possible to check for the pipe periodically for
data?


#5

unknown wrote:

Have a look here:

http://juggernaut.rubyforge.org/

I’ve only just seen it myself, so not sure if it’s what you want. I’ll
let
you decide!

-Nathan

It seems like doing File.read(“log.pipe”) would freeze the application

_<

Juggernaut looks interesting, but isn’t it for creating socket
connections?


#6

On 2/4/07, Wai T. removed_email_address@domain.invalid wrote:

Thanks a lot. Polling the server for changes and send the entire new
text isn’t very efficient if the file is large. Can ruby read from a
fifo pipe? And is it possible to check for the pipe periodically for
data?

That would not be very efficient, no. If the file is only being
appended to, you could send the last file size instead, and only send
the extra bytes.

In fact, if you’re after a “tail -f” sort of functionality, there was
a thread on this recently: http://rubyurl.com/9n4 .

Ruby can certainly read from fifos – check the IO docs. If you’re
going to poll the server, I think you’d have an added complication in
that each AJAX update request handler needs to access the same fifo
somehow. This is quite a complicated road to be going down though
IMHO.