Forum: Rails-ES Problema con rutas

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.
Jose vicente R. (Guest)
on 2009-04-21 18:13
He abierto este hilo porque me ha surgido una duda especifica de un
metodo tras estar trasteando con el script/runner. Os explico:

Tengo un problema a la hora de actualizar el usuario del dia, y seguro
que es por las rutas. A la hora de asignar el usuario del dia  lo que
hacemos es dentro de un grupo de usuarios que se han seleccionado
comprobar cuales tienen avatar y en funcion de esto se asignan como
tales o descartarlos como usuarios del dia.

En el modelo del avatar loq ue hacemos primero es entrar en la funcion
initialize ue es la que genera el error. Esta lo unico que hace es crear
DIRECTORIO en duncion de si exitia o no.

DIRECTORIO = File.join("public", "images", "avatar")


  def initialize(usuario, imagen=nil)
    @usuario = usuario
    @imagen = imagen
    Dir.mkdir(DIRECTORIO) unless File.directory?(DIRECTORIO)
  end

El problema esta aqui, pues el log de cron muestra lo sigueinte:

From: removed_email_address@domain.invalid (Cron Daemon)
To: removed_email_address@domain.invalid
Subject: Cron <jose@Jose> /opt/local/bin/ruby
/Users/jose/mimandote.com/script/runner 'Usuario.new_usr_dia'
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=jose>
X-Cron-Env: <USER=jose>
X-Cron-Env: <HOME=/Users/jose>
Message-Id: <removed_email_address@domain.invalid>
Date: Tue, 21 Apr 2009 13:07:03 +0200 (CEST)

/opt/local/lib/ruby/gems/1.8/gems/rails-2.1.2/lib/commands/runner.rb:47:
/Users/jose/mimandote.com/app/models/avatar.rb:21:in `mkdir': No such
file or directory - public/images/avatar (Errno::ENOENT)
        from /Users/jose/mimandote.com/app/models/avatar.rb:21:in
`initialize'
        from /Users/jose/mimandote.com/app/models/usuario.rb:169:in
`new'
        from /Users/jose/mimandote.com/app/models/usuario.rb:169:in
`avatar'
        from /Users/jose/mimandote.com/app/models/usuario.rb:251:in
`new_usr_dia'
        from /Users/jose/mimandote.com/app/models/usuario.rb:250:in
`each'
        from /Users/jose/mimandote.com/app/models/usuario.rb:250:in
`new_usr_dia'
        from (eval):1
        from
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
`eval'
        from
/opt/local/lib/ruby/gems/1.8/gems/rails-2.1.2/lib/commands/runner.rb:47
        from
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
`gem_original_require'
        from
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
`require'
        from /Users/jose/mimandote.com/script/runner:3


Se esta quejando de que no existe la ruta public/images/avatar. Que
deberia hacer, pasarla como una ruta absoluta??. Esta claro que en ese
caso no valdria uan al estilo Users/jose/mimandote.com/public/.... y
tendria que escribir la del servidor, verdad?. Como puedo obtener la
ruta del servidor, la verdad es que estoy un poco perdido en ese
aspecto?
Ruben D. (Guest)
on 2009-04-21 23:18
(Received via mailing list)
Hay que corregir esta linea:

DIRECTORIO = File.join(Rails.public_path, "images", "avatar")

Saludos.
Jose vicente R. (Guest)
on 2009-04-22 00:18
Ruben Davila wrote:
> Hay que corregir esta linea:
>
> DIRECTORIO = File.join(Rails.public_path, "images", "avatar")
>
> Saludos.

Gracias por la respuesta, mañana lo implemento.

Salu2
Jose vicente R. (Guest)
on 2009-04-23 11:41
Ruben Davila wrote:
> Hay que corregir esta linea:
>
> DIRECTORIO = File.join(Rails.public_path, "images", "avatar")
>
> Saludos.


Lo he intentado como dices, pero no ha dado resultado...lo que me
"preocupa"
 es que cron no ha mandado ningun  error en el log al ponerlo como
dices...es como si todo hubiera ido bien..pero mi usuario del dia no
cambiaba.
Jose vicente R. (Guest)
on 2009-04-23 12:33
Os comento un poco el codigo que tengo...
Esta es la linea que tengo en el crontab:

*       */6       *       *       *       /opt/local/bin/ruby
/Users/jose/mimandote.com/script/runner 'Usuario.new_usr_dia'

Con ella quiero ejecutar cada 6 horas  el metodo new_usr_dia. Ahora os
comento un poco como lo tengo en la aplicacion:


En el modelo de usuario tengo definido el new_usr_dia. Basicamente lo
que hace es seleccionar dentro de un grupo de usuarios uno que tenga
avatar y aun no haya sido usuario del dia.

 def self.new_usr_dia
    cambiado = false
    Usuario.all(:conditions => "usuario_del_dia is NULL", :order =>
"posicion_ranking", :limit => 200).each do |usuario|
      if cambiado == false and usuario.avatar.existe? # El usuario del
dia tiene que tener avatar
        usuario.update_attribute('usuario_del_dia',Time.now.to_s(:db))
        cambiado = true
      end
    end
    'UPDATE usuarios SET usuario_del_dia = NULL'.lanza_sql    if
cambiado == false
  end


En el modelo de avatar tengo:

la constante DIRECTORIO:

DIRECTORIO = File.join("public", "images", "avatar")
(Esta es la que habia cambiado por DIRECTORIO =
File.join(Rails.public_path, "images", "avatar")

Los metodos:

 def initialize(usuario, imagen=nil)   #Crea el directorio si no existe
    @usuario = usuario
    @imagen = imagen
    Dir.mkdir(DIRECTORIO) unless File.directory?(DIRECTORIO)
  end

  def existe?
    logger.debug "AVATAR.RB(existe?): directorio #{DIRECTORIO} - todo
#{File.join(DIRECTORIO, nombre_archivo)}"
    File.exists?(File.join(DIRECTORIO, nombre_archivo))
  end

------
NOTA
------
Lo mas extraño es que antes de ponerme a investigar como poder
automatizar esta tarea con el script/runner la corriamos a mano desde un
panel de control que tenemos para usuarios que lo unico que hacia era
llamar a la funcion new usuario del dia si desde la vista. Tan simple
como esto:

 Usuario.new_usr_dia if params[:accion] == 'new-usr-dia'
Jose vicente R. (Guest)
on 2009-04-23 15:19
Solucionado....si lo ejecutaba en local no puedo esperar que se ejecute
en el servidor!!!.

Entre en el servidor, modifique las rutas a las correspondientes en el
servidor y le añadi el script/runner y todo como la seda. Costo, pero he
aprendido unas cuantas cosas...gracias a to2 por la ayuda.
This topic is locked and can not be replied to.