Eruby, install, try

Salve, ho installato apache… installato ruby, e ho installato eruby
seguendo questa guida… http://www.ruby-forum.com/topic/152899.
Ho provato il programma su
http://ruby.html.it/guide/lezione/3644/embedded-ruby/.
Lo salvato come test.rhtml e funziona…
Poi ho provato un programma del mio prof…ma mi dà error server
matteo.vaccari.name/aw/2011/lezione05/lezione05.tgz
Non capisco se è il codice del prof che è sbagliato, o non ho
configurato bene il server, o mi manca da installare qualcosa…
Ho cercato su internet ma non ho trovato del materiale che mi spieghi
bene…
Qualcuno mi può aiutare? :frowning:

Il materiale di HTML.it edatato, per esempio i file ERB hanno estensione erb non rhtml. Anche il link su mod_ruby e datato, devi
sapere che mod_ruby emorto o non lo usa piu nessuno, il suo
successore e` Pushion Passenger aka mod_rails.

Al momento tutti usano Rack, non CGI. Server Rack per lo sviluppo sono
Webrick e Mongrel, ma anche Thin. Se hai un progetto con Ruby on Rails
puoi eseguire il codice con

rails server

senza tante complicazioni.

Se ti serve di provare gli esempi a scopo didattico devi postare piuinformazioni. Nesssuno si installera il tuo tar.gz. Se non hai tempo
per scrivere i dettagli, tanto meno gli altri hanno tempo da dedicare
per scrivere una risposta.

sono stato un po’ troppo vago… Il prof nelle sue lezioni ha elencato di
studiarsi il ruby, e poi solo l’embedded ruby e poi di far partire un
suo progetto sulla macchina apache e putroppo non mi parte dandomi
server error.
Esso contiene un file CGI di partenza:
#!/usr/bin/env ruby
# Produce una scacchiera disegnata con HTML e CSS

       require 'lib/response'
       require 'lib/request'
       require 'lib/board'

       board = Board.new
       response = Response.new

       response.respond_with board.html

E richiama diversi file con estensione .erb, ed .rb.

Io ho installato eruby seguendo questa guida
Ubuntu/Apache/Eruby - Ruby - Ruby-Forum cioè:
sudo apt-get install ruby libapache2-mod-ruby
E poi aggiungendo nel conf di apache un file del tipo:

AddType text/html .rhtml

RubyRequire apache/ruby-run RubyRequire apache/eruby-run

Execute *.rbx files as Ruby scripts

<Files *.rbx>
SetHandler ruby-object
RubyHandler Apache::RubyRun.instance

Handle *.rhtml files as eRuby files

<Files *.rhtml>
SetHandler ruby-object
RubyHandler Apache::ERubyRun.instance

Forse devo aggiungere AddType text/html .erb?
Qualcuno può darmi delle indicazioni?

Per avere piu informazioni dovresti andare nel error.log del server. Su Ubuntu dovrebbe essere in /var/log/apache2/error.log. Cosi potresti avere piu dettagli sull’errore.

Ho trovato questo semplice tutorial:
http://www.howtoforge.com/apache2-mod_ruby-with-ispconfig-2.2.20-and-above

Vedi se almeno il file di esempio ti riesce di farlo partire.

Putroppo modruby e` un progetto defunto e nessuno lo usa, guarda qua:
http://www.modruby.net/

Se poi vorrai veramente impararti lo sviluppo web imparati sinatra o
ruby on rails. Mi dispiace che in Italia le universita` siano cosi
distaccate dal mondo reale.

Posta gli errori dal log e vedi se il tutorail di howtoforge ti funziona

Il file di prova hello.rb mi funziona se nella prima riga metto:
#!/usr/bin/env ruby, senza questa riga non funziona…
I file ruby in genere mi funzionano…
Altrimenti mi da errore, la shell risponde così:
./hello.rb: riga 2: class: comando non trovato
./hello.rb: riga 3: errore di sintassi vicino al token non atteso “(”
./hello.rb: riga 3: ` def initialize(name)’

Ho provato a seguire il tutorial che hai detto e ho fatto altre prove
che ho trovato in giro… mettendo ogni volta nel file di default tra i
tag (VirtualHost), ma ho visto che mi dava sempre questi errori se
facevo partire il file hello.rb senza la riga #!/usr/bin/env ruby:
[error] mod_ruby: error in ruby
[error] mod_ruby: /usr/lib/ruby/1.8/apache/ruby-run.rb:53:in load': loading from unsafe file /usr/lib/cgi-bin/helloprova.rb (SecurityError) [error] mod_ruby: from /usr/lib/ruby/1.8/apache/ruby-run.rb:53:inhandler’
/usr/lib/ruby/1.8/apache/ruby-run.rb:53: warning: Insecure world
writable dir /usr/lib/cgi-bin in LOAD_PATH, mode 040557

Allora ho provato a togliere tutte le modifiche che ho fatto, riportando
la configurazione come era prima e mi dà invece:
[error] (8)Exec format error: exec of ‘/usr/lib/cgi-bin/hello.rb’ failed
[error] [client 127.0.0.1] Premature end of script headers: hello.rb

Ho provato di nuovo il programma del prof e poi l’ho riprovato
aggiungendoci anche ai file .rb la riga: #!/usr/bin/env ruby, ma mi da
sempre error server, con questi error log:
[Wed Jan 04 19:12:29 2012] [error] [client 127.0.0.1] Premature end of
script headers: scacchiera.cgi
./lib/board.rb:8:in `html’: uninitialized constant Board::Template
(NameError)

Anche facendolo partire dalla shell da l’errore:
./lib/board.rb:8:in `html’: uninitialized constant Board::Template
(NameError)
from ./scacchiera.cgi:12

Sembra un errore di programma.

Cosa posso fare? Non so se è un errore del programma del prof, ma mi
sembra strano che da programmi sbagliati, oppure sono io che non ho
impostato bene il server…:frowning:

On 4 January, 2012, at 20:19, Alessandro Nov wrote:

./lib/board.rb:8:in `html’: uninitialized constant Board::Template
(NameError)

Anche facendolo partire dalla shell da l’errore:
./lib/board.rb:8:in `html’: uninitialized constant Board::Template
(NameError)
from ./scacchiera.cgi:12

Il resto degli errori me li rileggo con calma, anche se ho lavorato
pochissimo in scripting in quel modo; intanto posso dirti qualcosa
sull’ultima parte.

Ruby mediamente fa un buon lavoro nel dirti cosa stai sbagliando, o cosa
“non capisce” del tuo codice.
Nello specifico ti segnala una “costante non inizializzata”. Tradotto:
per Ruby “Board::Template” non esiste. Cos a occhio, o non trova il
modulo Board, o nel modulo Board non trova la classe Template.
O c’ un errore nella definizione delle stesse, o mancano all’appello i
file che contengono le definizioni.

In bocca al lupo :slight_smile:

Alessandro

ok :), grazie per il vostro aiuto :), vuol dire che proverò a rifare con
calma il programma e vedere perchè non funziona…

#!/usr/bin/env ruby econosciuto come she-bang, e usato in unix per
eseguire uno script senza metterci davanti l’interprete. Per esempio
senza she-bang:

bash script.sh

Script con she-bang:

./script.sh

il punto davanti serve se sei nella stessa directory per regioni di
sicurezza. La stessa cosa vale per ruby and se

#!/usr/bin/env ruby

dichiara ruby come interprete senza specificare la path di ruby, per
esempio con la path dichiarata sarebbe:

#!/usr/bin/ruby

se il tuo ruby sta in /usr/bin/ruby.

Quindi se lo levi apache non sa che deve eseguire lo script e ti da gli
errori di sintassi che hai riportato.

Come dice Alessandro M. probabilmente lo script non carica il
file dove edefinito Board. Cerca di commentare il progetto il piu
possibile per avere una versione funzionante, poi aggiungi il codice a
pezzattini, passo dopo passo dovresti trovare il problema.

Controlla i ‘require’ perche` sono gli statement che caricano gli altri
file, magari hanno una path assoluta diversa dalla tua

occhio e croce manca un

require ‘lib/template’

in testa a board.rb

un cgi anni ottanta (molto hipster) a me funziona aggiungendo ad apache
un semplice

1 <Directory “/Users/gicappa/Sites/lezione05/”>
2 AddHandler cgi-script .cgi .rb
3 Options +ExecCGI
4

nella configurazione.
Ciao,

gk

grazie mille per l’aiuto :), mancava solo un require ‘lib/template’!
Adesso funziona correttamente :slight_smile:

Per quanto riguarda l’eseguzione di script ruby su Unix leggi questo:
http://en.wikibooks.org/wiki/Ruby_Programming/Hello_world

L’errore

./lib/board.rb:8:in `html’: uninitialized constant Board::Template

Dice che c’e una constante non inizializzata, la linea 8 e:

t.expand(binding)

se ci fai caso binding non e definita. Una delle regole principali di programmazione e leggere bene gli errori :slight_smile: