Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Un extraño error en el server por un módulo

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Módulos
Mensaje Mie Jun 25, 2008 6:26 am
danimera
Perlero Adicto
Perlero Adicto
Registrado: 23 Jun 2005
Mensajes: 206
Ubicación: Colombia
Un extraño error en el server por un módulo Responder citando

Hola estoy usando el módulo HTML::Calendar

y este es mi código, algo muy simple
Perl:
#!/usr/bin/perl
use CGI qw(:all);
use HTML::Calendar::Simple;

print header;


  my $cal = HTML::Calendar::Simple->new; # This month, this year
     $cal = HTML::Calendar::Simple->new({ 'month' => 9,
                                          'year'  => 2008});

 
  $cal->pin_up("http://zephiroclub.net/varios/cinesu.gif")
  $cal->daily_info({ 'day'      => 1,
                     'day_link' => "http://www.zephiroclub.net/WebAPP/images/uploads/NarutoShippuden51.jpg",
                     $type2     => $info2,
                     'link'     => [$link, "<img src='http://www.zephiroclub.net/WebAPP/images/topics/reviews.gif' align='absmiddle' alt='feoajja'>"],
  });
  $cal->daily_info({ 'day'      => 2,
                     'day_link' => "http://www.zephiroclub.net/WebAPP/images/uploads/NarutoShippuden51.jpg",
                     $type2     => $info2,
                     'link'     => [$link, "<img src='http://www.zephiroclub.net/WebAPP/images/topics/reviews.gif' align='absmiddle'>"],
  });
  $cal->daily_info({ 'day'      => 3,
                     'day_link' => "http://www.zephiroclub.net/WebAPP/images/uploads/NarutoShippuden51.jpg",
                     $type2     => $info2,
                     'link'     => [$link, "<img src='http://www.zephiroclub.net/WebAPP/images/topics/reviews.gif' align='absmiddle'>"],
  });

 

    my $html = $cal->calendar_month;
 
 print $html;


Cuando lo ejecuto localmente en mi IIS en Windows, funciona normal...
Pero cuando lo subo a Internet a mi hosting obtengo un error 500 y miro el log y me dice nada más y nada menos que:

Código:
[Wed Jun 25 07:18:12 2008] [error] [client 200.29.127.95] File does not exist: /home/bitacor4/public_html/500.shtml
[Wed Jun 25 07:18:12 2008] [error] [client 200.29.127.95] Premature end of script headers: /home/bitacor4/public_html/lista.pl


Ahora, para poder instalar módulos en mi hosting hay una opción y me dice esto:

Ubicación de Su Perl Module(s)
Ruta: /home/bitacor4/perl

Usando Su Perl Module(s)
necesitará añadir /home/bitacor4/perl al path de exclusión.
Puede hacer esto añadiendo el siguiente código a su script:
Perl:
my $homedir = (getpwuid($>))[7];
my $n_inc = scalar @INC;
for (my $i = 0; $i < $n_inc; $i++ ) {
     if (-d $homedir . '/perl' . $INC[$i]) {
         unshift(@INC,$homedir . '/perl' . $INC[$i]);
         $n_inc++;
         $i++;
     }
}


No sé qué pueda estar pasando, ya que estoy acostumbrado al IIS donde todo me funciona bonito, en cambio, Linux, no me quiere Rolling Eyes
Mensaje Mie Jun 25, 2008 6:44 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1361
Ubicación: México
Responder citando

Hola:

Tu script te está regresando un error interno, y la línea

Código:
[Wed Jun 25 07:18:12 2008] [error] [client 200.29.127.95] File does not exist: /home/bitacor4/public_html/500.shtml


simplemente te indica que no encontró el archivo 500.html que sería el template para mostrarte el error de servidor.

Deberías de checar algunas cosas:

* Verifica que la transferencia del archivos por FTP sea en ASCII y NO en binario.

* Verifica que tu script tenga permisos de ejecución. Normalmente 0755 ó 0775

Después de eso te recomiendo que agregues la línea:

Perl:
use CGI::Carp qw(fatalsToBrowser);


para que te muestre en el navegador cualquier error que puedas tener.


Saludos
Mensaje Mie Jun 25, 2008 7:55 am
danimera
Perlero Adicto
Perlero Adicto
Registrado: 23 Jun 2005
Mensajes: 206
Ubicación: Colombia
Responder citando

Gracias kidd, pues el problema sí está en el módulo. Ahora con el CGi::Carp tengo

Código:
Software error:
Can't locate HTML/Calendar/Simple.pm in @INC (@INC contains: /usr/lib/perl5/5.8.8/i686-linux /usr/lib/perl5/5.8.8 /usr/lib/perl5/site_perl/5.8.8/i686-linux /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl/5.8.1 /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl .) at lista.pl line 4.
BEGIN failed--compilation aborted at lista.pl line 4.


Se supone que lo instalé en el hosting con una opción que trae. Imagino que tengo que usar el código que puse anteriormente para poder usar el módulo...
Mensaje Mie Jun 25, 2008 8:25 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1361
Ubicación: México
Responder citando

No creo que sea necesario poner todo el código que te pusieron, si el módulo lo instalaste en:
/home/bitacor4/perl

Bastaría con agregar la ruta en la ruta de búsqueda de módulos de Perl. Para ello pon la siguiente línea antes de la carga del módulo:

Perl:
use lib('/home/bitacor4/perl');
Mensaje Mie Jun 25, 2008 9:01 am
danimera
Perlero Adicto
Perlero Adicto
Registrado: 23 Jun 2005
Mensajes: 206
Ubicación: Colombia
Responder citando

Gracias pero aun me sigue saliendo este error:

Código:
Software error:
Can't locate HTML/Calendar/Simple.pm in @INC (@INC contains: /home/bitacor4/perl /usr/lib/perl5/5.8.8/i686-linux /usr/lib/perl5/5.8.8 /usr/lib/perl5/site_perl/5.8.8/i686-linux /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl/5.8.1 /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl .) at lista.pl line 5.
BEGIN failed--compilation aborted at lista.pl line 5.

y eso que la aplicación del hosting me dice que ya está instalado.

www.bitacora.biz/hostg.jpg
Mensaje Mie Jun 25, 2008 9:25 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 3841
Ubicación: Valladolid, España
Responder citando

Debes hacer lo que te dicen: agregar el trozo de código que te ponen al principio de tu programa. Quizás exista alguna diferencia en usar use lib a calcular antes el valor del $homedir (quizás, también, /home/bitacor4 no sea tu $homedir).

Una cosilla, las líneas
Perl:
  my $cal = HTML::Calendar::Simple->new; # This month, this year
     $cal = HTML::Calendar::Simple->new({ 'month' => 9,
                                          'year'  => 2008 });

es mejor dejarlas así:
Perl:
my $cal = HTML::Calendar::Simple->new({ 'month' => 9, 'year'  => 2008 });


Lo que sí puedes es hacerlo por partes: primero pones un programa para saber cómo va a modificar @INC el trozo de su script. Una vez que sepas qué valor ha metido, ya sabes qué es lo que tienes que poner en tu use lib.
Mensaje Jue Jun 26, 2008 7:33 am
danimera
Perlero Adicto
Perlero Adicto
Registrado: 23 Jun 2005
Mensajes: 206
Ubicación: Colombia
Responder citando

home/bitacor4 es mi $homedir
Mensaje Jue Jun 26, 2008 3:28 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 3841
Ubicación: Valladolid, España
Responder citando

Haz un cgi cuya misión sea hacer un listado del contenido del directorio /home/bitacor4/perl, para ver lo que hay dentro.

Esos módulos deben estar en algún sitio.

He revisado el código que modifica el @INC... y veo cosas muy raras... Yo creo que no hace nada...

Se tienen que dar las siguientes circunstancias:

* Debe existir un subdirectorio /perl dentro del directorio personal
* Entre alguno de los directorios de @INC, se debe dar la casualidad de que la misma estructura de ese directorio se debe repetir dentro de ese directorio /perl

Así, si @INC contiene, por ejemplo,
Código:
  @INC:
    /usr/lib/perl5/5.8.8/i586-linux-thread-multi
    /usr/lib/perl5/5.8.8
    /usr/lib/perl5/site_perl/5.8.8/i586-linux-thread-multi
    /usr/lib/perl5/site_perl/5.8.8
    /usr/lib/perl5/site_perl
    /usr/lib/perl5/vendor_perl/5.8.8/i586-linux-thread-multi
    /usr/lib/perl5/vendor_perl/5.8.8
    /usr/lib/perl5/vendor_perl
    .

eso quiere decir que alguno de estos directorios, su estructura, se debe repetir dentro de ese directorio /perl.
* Si existe toda esa combinación, se agrega ese directorio a @INC.

Un ejemplo: si en tu cuenta de usuario existe TODO este directorio: /home/bitacor4/perl/usr/lib/perl5/site_perl Y /usr/lib/perl5/site_perl es uno de los directorios que están en @INC, entonces ese directorio se añade a @INC.

Debes averiguar qué es lo que hay en tu carpeta /perl. Vale con ver los directorios que existen dentro de él.

Podríamos usar el siguiente comando de find:
bash:
find /home/bitacor4/perl -type d
pero claro, en un hosting no suele ser habitual que nos dejen hacer eso.

Con la ayuda del comando find2perl podemos transformar el comando anterior en un programa Perl que sí podemos ejecutar allí:
bash:
explorer@portatil:~/Documents/Desarrollo/perl510> find2perl /home/bitacor4/perl -type d
#! /usr/bin/perl -w
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
        if 0; #$running_under_some_shell

use strict;
use File::Find ();

# Set the variable $File::Find::dont_use_nlink if you're using AFS,
# since AFS cheats.

# for the convenience of &wanted calls, including -eval statements:
use vars qw/*name *dir *prune/;
*name   = *File::Find::name;
*dir    = *File::Find::dir;
*prune  = *File::Find::prune;

sub wanted;



# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, '/home/bitacor4/perl');
exit;


sub wanted {
    my ($dev,$ino,$mode,$nlink,$uid,$gid);

    (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
    -d _
    && print("$name\n");
}
Lo subimos al servidor y lo ejecutamos. El resultado lo podríamos ver como CGI o llevarlo a un fichero y luego descargarlo.

O también... quizás en ese hospedaje dispongas de alguna herramienta web o acceso por FTP que te permita ver tus subdirectorios.
Mensaje Jue Jun 26, 2008 8:39 pm
danimera
Perlero Adicto
Perlero Adicto
Registrado: 23 Jun 2005
Mensajes: 206
Ubicación: Colombia
Responder citando

Resulta que revisé mi directorio donde debían estar los módulos que yo instalo y a que no adivinas que... Sí existe el directorio /perl dentro de /home/bitacor4/

Pero no existe /home/bitacor4/perl/usr/lib/perl5/site_perl Y /usr/lib/perl5/site_perl por tanto no está en @INC.

Al final me dijeron los de soporte que no dejaban instalar módulos que no fueran estándar y pues ahora será utilizarlo manualmente.
Mensaje Vie Jun 27, 2008 6:46 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 3841
Ubicación: Valladolid, España
Responder citando

Pues nada... cambia de alojamiento... O rómpete la cabeza para instalar tus módulos en el directorio /perl.

Me gustaría saber qué entienden ellos por 'módulos estándar'.
Mensaje Vie Jun 27, 2008 7:25 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1361
Ubicación: México
Responder citando

explorer escribió:
Me gustaría saber qué entienden ellos por 'módulos estándar'.


Cada administrador con su lógica. Para ya hace varios años por alguna extraña razón me encontré trabajando en un sitio cuyos administradores no permitían la instalación del módulo DBD::MySQL, supuestamente porque no era un módulo estándar.

Entiendo que por seguridad no te permiten meter cualquier cosa, pero a veces llega al absurdo...
Mensaje Vie Jun 27, 2008 9:52 am
danimera
Perlero Adicto
Perlero Adicto
Registrado: 23 Jun 2005
Mensajes: 206
Ubicación: Colombia
Responder citando

Bueno, me dicen que ni el módulo CGI::Session es estándar...

Pero me acabo de dar cuenta que los que manejan eso son uno ineptos o como sea...

Porque ellos si le pueden instalar a uno los módulos, solo que estos administradores como no han trabajado con programadores mucho, entonces nunca les han pedido nada así y ya creen que es raro... y según ellos porque el server no es dedicado. ¿Qué tal, ha¿?
Mensaje Vie Jun 27, 2008 10:29 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 3841
Ubicación: Valladolid, España
Responder citando

Yo entiendo un poco su postura: si poseen un servidor físico en donde alojan a muchos clientes, esos clientes suelen compartir los recursos de esa máquina (salvo en el caso de sitios web funcionando sobre servidores virtuales).

Bueno, pues es claro que si alguien quiere instalar algo en una máquina, eso que instala puede afectar al resto de usuarios, incluso tirar la máquina abajo. Y Perl es conocido por ser capaz de hacer eso. Otros lenguajes no tienen tan mala fama.

Una solución siempre pasa entonces por permitir al usuario que se instale lo que quiera en su propio directorio, pero esto no garantiza tampoco que influya en el rendimiento de la máquina. Una forma de evitarlo es ajustando los límites máximos permitidos de consumo de recursos al usuario a nivel de sistema operativo. En Linux, usando el comando ulimit, se arregla bastante el tema. Y si además, se enjaulan todos los procesos del usuario en su directorio (con chroot) pues tenemos entonces un nivel de seguridad altísimo. Lo malo es que un usuario siempre está necesitando de recursos externos a su directorio (programas de correo, programas de la carpeta /bin, etc.). Así que no es tan sencillo.

Hoy en día, la solución más comercial pasa por la virtualización. Ya que el hardware es cada vez más barato, y más potente, en una sola máquina se meten diez o veinte máquinas virtuales (o más) y con eso das servicio a centenares de usuarios interactivos (correo, ftp) y miles de peticiones sin conexión (web).

Si quieres más protección y seguridad, entonces no te queda más remedio que contratar un servidor dedicado. Y ahí sí que haces lo que te de la gana.
Mensaje Vie Jun 27, 2008 11:40 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1361
Ubicación: México
Responder citando

Yo manejo un par de servidores dedicados. Estos los adquirí en Layered Tech:
http://www.layeredtech.com/

En mi opinión de las mejores compañías en servidores dedicados.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Módulos Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group