Problemino di deployng sito prova

Ringraziando sin d’ora coloro che vogliono darmi qualche suggermento, vi
espongo il problemino, premettendo che sono ancora troppo poco esperto
per poter conoscere bene Ror… e molte altre cose…
Stò cercando di fare un sito di prova su un VPS messomi cortesemente a
disposizione dall’amm.ne worknet.it ma ho incontrato qualche problema
nella parte frontoffice (spero di aver scritto bene) e credo che sia
dovuto a delle mie carenze nel capire il funzionamento di sqlite3 e
passenger su un sistema slackware.
Il problema lo ho incontrato sia nel VPS remoto con il quale comunico da
terminale che con il PC che uso per fare le prove in “casa”.
Ho l’impressione che sia un problema di permessi, ma non ne sono sicuro
e se mai così fosse, mi piacerebbe sapere come risolvere la cosa.
Per facilitare coloro che vogliono darmi dei suggerimenti aggiungo le
seguenti informazioni:

Versione
ruby 1.9.2p0 (2010-08-18 revision 29036) [i686-linux]

*** LOCAL GEMS ***

abstract (1.0.0)
actionmailer (3.0.3, 3.0.1, 3.0.0)
actionpack (3.0.3, 3.0.1, 3.0.0)
activemodel (3.0.3, 3.0.1, 3.0.0)
activerecord (3.0.3, 3.0.1, 3.0.0)
activeresource (3.0.3, 3.0.1, 3.0.0)
activesupport (3.0.3, 3.0.1, 3.0.0)
arel (2.0.5, 2.0.1, 1.0.1)
builder (3.0.0, 2.1.2)
bundler (1.0.7, 1.0.3, 1.0.2)
capistrano (2.5.19)
columnize (0.3.2, 0.3.1)
daemon_controller (0.2.5)
erubis (2.6.6)
fastthread (1.0.7)
file-tail (1.0.5)
highline (1.6.1)
i18n (0.5.0, 0.4.1)
mail (2.2.11, 2.2.7, 2.2.6.1)
mime-types (1.16)
minitest (2.0.0, 1.7.2, 1.6.0)
net-scp (1.0.4)
net-sftp (2.0.5)
net-ssh (2.0.23)
net-ssh-gateway (1.0.1)
passenger (3.0.0, 2.2.15)
polyglot (0.3.1)
rack (1.2.1)
rack-mount (0.6.13)
rack-test (0.5.6, 0.5.4)
rails (3.0.3, 3.0.1, 3.0.0)
railties (3.0.3, 3.0.1, 3.0.0)
rake (0.8.7)
rdoc (2.5.11, 2.5.8)
spruz (0.2.2, 0.1.5)
sqlite3-ruby (1.3.2, 1.3.1)
thor (0.14.6, 0.14.3, 0.14.1)
treetop (1.4.9, 1.4.8)
tzinfo (0.3.23)

La configurazione VirtualHost è la seguente:

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot “/var/www/htdocs/cyber-prova/public”
ServerName cyber-prova.cyberservices.it

ServerAlias www.cyber-prova.it

  RailsEnv development
    PassengerLogLevel 3
 RailsBaseURI /rails
ErrorLog "/var/log/httpd/cyber-prova.it-error_log"
CustomLog "/var/log/httpd/cyber-prova.it-access_log" common
    <Directory /home/www/htdocs/cyber-prova/public >
      Options -MultiViews
      AllowOverride all
      Order deny,allow
      # Deny from all
      Allow from all
    </Directory>

ho riscontrato lo stesso problema anche con l’istruzione RailsEnv
production
non riesco a superare lo scoglio (error 500)
Grazie ancora a tutti coloro che gentilmente mi possono fornire qualche
dritta.

Ciao Romeo,

Controlla nei files di log e posta qui le parti interessanti.

In ogni caso stai usando RailsBaseURI nel modo sbagliato, dai
un’occhiata alla documentazione
http://www.modrails.com/documentation/Users%20guide%20Apache.html#deploying_rails_to_sub_uri


Duilio R.
http://sinetris.info

il primo consiglio di guardare i logs in TUA_RAILS_APP/log/

l trovi i log per development production

controlla bene anche i logs di apache (se non ricordo male dovrebbero
essere in
/var/log/http/)

sicuramente in questi files troverai almeno l’origine del problema (cio
quello
che causa error 500). poi in caso ri-posta l’errore qui in lista, cos
sar pi
facile indirizzarti per una soluzione :wink:

ciao,
A.

Il 01/12/2010 14:16, Romeo C. ha scritto:

Ho l’impressione che sia un problema di permessi, ma non ne sono sicuro
*** LOCAL GEMS ***
bundler (1.0.7, 1.0.3, 1.0.2)
minitest (2.0.0, 1.7.2, 1.6.0)
railties (3.0.3, 3.0.1, 3.0.0)

     <Directory /home/www/htdocs/cyber-prova/public>

production
non riesco a superare lo scoglio (error 500)
Grazie ancora a tutti coloro che gentilmente mi possono fornire qualche
dritta.


http://twitter.com/apeacox

Grazie ragazzi per i consigli, appena posso (quando riesco a ricavarmi
un po’ di tempo) controllo meglio la situazione. Per il momento ho
sbirciato el file production.log ed effettivamente c’era:
SQLite3::CantOpenException (unable to open database file):
farò qualche modifica e qualche prova, poi mi rifaccio sentire…
Grazie ancora

Ciao Ragazzi,
in seguito al problemino di deploing dell’applicazione di prova, ho
scelto di ricominciare l’esperimento partendo da questo punto:
ho modificato la parte httpd-vhosts.conf tenendo conto di quanto scritto
da Duilio R. inibendo il comando RailsBaseURI/rails, e ho
condizionato RailsEnv production, mi sono accorto anche che vi era un
errore di indirizzamento al comando <Directory
/home/www/htdocs/cyber-prova/public > che ho corretto, quindi il
risultato della parte di codice è questo:

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot “/var/www/htdocs/cyber-prova/public”
ServerName cyber-prova.cyberservices.it

ServerAlias www.cyber-prova.it

  RailsEnv production
    PassengerLogLevel 3

RailsBaseURI /rails

ErrorLog "/var/log/httpd/cyber-prova.it-error_log"
CustomLog "/var/log/httpd/cyber-prova.it-access_log" common
    <Directory /var/www/htdocs/cyber-prova/public >
      Options -MultiViews
      AllowOverride all
      Order deny,allow
      # Deny from all
      Allow from all
    </Directory>

ho fatto ripartire apache, mi sono ricollegato e ovviamente il risultato
è rimasto invariato: errore 500, il problemino di scrittura su sQlite3
continua a persistere.
A questo punto credo che sia meglio rifare tutta la procedura
specificando al meglio i passaggi, magari si riesce a capire quali siano
i possibili errori o omissioni che impediscono il funzionamento della
applicazione:
per prima cosa rimuovo la Dir cyber-prova con il comando rm -r
cyber-prova lanciato da terminale su posizione /var/www/htdocs/
poi riparto da rails new cyber-prova
segue generazione directorys dell’applicazione
mi porto in cyber-prova con cd cyber-prova
e lancio l’installazione di bundle con il comando bundle install per il
coordinamento delle gems
ed ottengo la risposta:
Fetching source index for http://rubygems.org/
Using rake (0.8.7)
Using abstract (1.0.0)
Using activesupport (3.0.3)
Using builder (2.1.2)
Using i18n (0.5.0)
Using activemodel (3.0.3)
Using erubis (2.6.6)
Using rack (1.2.1)
Using rack-mount (0.6.13)
Using rack-test (0.5.6)
Using tzinfo (0.3.23)
Using actionpack (3.0.3)
Using mime-types (1.16)
Using polyglot (0.3.1)
Using treetop (1.4.9)
Installing mail (2.2.12)
Using actionmailer (3.0.3)
Installing arel (2.0.6)
Using activerecord (3.0.3)
Using activeresource (3.0.3)
Using bundler (1.0.7)
Using thor (0.14.6)
Using railties (3.0.3)
Using rails (3.0.3)
Using sqlite3-ruby (1.3.2)
Your bundle is complete! Use bundle show [gemname] to see where a
bundled gem is installed.
a questo punto come nella più classica delle applicazioni proposte dall
guida Getting Started with Rails — Ruby on Rails Guides
eseguo il comando rake db:create
(in /var/www/htdocs/cyber-prova)
db/test.sqlite3 already exists
db/development.sqlite3 already exists
a questo punto, ricordando che lavoro da terminale, vado a verificare se
riesco a vedere la paginetta di default delle applicazioni RoR
ovviamente la paginetta compare, ma se si va a cliccare sulla parte
About your application’s environment compare l’errore
We’re sorry, but something went wrong.
We’ve been notified about this issue and we’ll take a look at it
shortly.

Effettuando la stessa procedura sul PC di casa, quindi in locale dove
il file httpd-vhosts.conf ha come differenza questa: ServerName
127.0.0.1
compare la scritta: SQLite3::CantOpenException
Rails.root: /var/www/htdocs/cyber-prova
nota: se la procedura viene effettuata lanciando WEBrick, invece tutto
funziona correttamente e la pagina welcome elenca le caratterisctiche
dell’applicazione.
Certo, il settaggio di httpd-vhosts.conf è configurato su RailsEnv
production
ma anche se si modifica in RailsEnv development la sostanza resta
quella.
Io credo che già a questo livello si possa notare quale sarà il problema
nel prosieguo della pubblicazione, ma andiamo avanti…
sempre seguendo la procedura illustrata in getting_started.html,
generiamo il controller home con il comando: rails generate controller
home index
a questo punto entro nella dir public e rinomino il file index.html con
il comando mv index.html vecchio.html (la guida dice di rimuoverlo con
il comando rm index.html)
a questo punto però dobbimo modificare routes.rb dicendogli di far
riferimento alla pagine index del controller home quindi mi sposto nella
dir config e con il comando nano (da terminale) modifico il file
routes.rb e ottengo il seguente risultato:

root :to => “home#index”
(se si prova a visitare la pagina del VPS adesso compare direttamente
l’errore 500: We’re sorry, but something went wrong.
su quello locale all’indirizzo http://127.0.0.1 risulta:
SQLite3::CantOpenException ecc.)
ma se in locale, dopo aver lanciato WEbrick si accede alla pagina
http://localhost:3000/ compare correttamente index.html.erb dovuto a
home controlloer
detto questo, mi sposto in cyber-prova e continuo a seguire
scrupolosamente la guida e utilizzo il comando:

rails generate scaffold Post name:string title:string content:text
si generano le directorys i files ecc. relative a questa potente
istruzione.
e si può procedere con la migrazione utilizzando il comando: rake
db:migrate
tutto procede bene e ottengo:
(in /var/www/htdocs/cyber-prova)
== CreatePosts: migrating

– create_table(:posts)
→ 0.0071s
== CreatePosts: migrated (0.0100s)

pronto per la modifica del file nella directory
…/app/views/home/index.html.erb
che vado ad apportare con “nano” (da terminale) aggiungendo
semplicemente la riga di comando
<%= link_to “Cyber Blog”, posts_path %>
quindi, in locale lanciando WEBrick si può incominciare ad accedere al
database anche in scrittura nella modalità predefinita development
mentre se utilizziamo apache e passenger, anche con l’istruzione
RailsEnv development in httpd-vhosts.conf ottengo il solito errore.
a questo punto però, siccome ho fatto la migrazione solo in modalità
development, rifaccio la migrazione anche per la modalità production con
il comando:
rake db:migrate RAILS_ENV=production
ed ottengo la risposta:
(in /var/www/htdocs/cyber-prova)
== CreatePosts: migrating

– create_table(:posts)
→ 0.0051s
== CreatePosts: migrated (0.0075s)

ed ecco la prima magia, compare anche con apache e passenger la pagina
index del controller home, psosso anche portarmi sulla pagina index del
controller posts e addirittura inoltrarmi sino alla pagina New post, ma
quando, dopo aver inserito i dati sugli appositi campi, invio il comando
“Create Post” la magia svanisce e ritorno al solito errore nella
visualizzazione da terminale, mentre in quella locale, compare più
dettaglatamente che il problema risale all’impossibilità di creare il
file : ActiveRecord::StatementInvalid in PostsController#create.
SQlite3::ReadOnlyException:
A questo punto mi appello a voi Egregi Signori… (con un pizzico di
ironia )… per l’ardua sentenza… ovviamente ringraziando
anticipatamente e scusandomi se mi sono dilungato anche più del dovuto.

Ciao Romeo,

We’re sorry, but something went wrong.
We’ve been notified about this issue and we’ll take a look at it
shortly.

Questo “errore” è normale che compaia dato che la pagina che richiedi è
visibile solo in development.

SQLite3::CantOpenException

Questo è molto probabilmente un errore di permessi.
Controlla l’utente dei files della tua applicazione rails (non deve
essere l’utente root) ed i permessi di lettura e scrittura.
(Phusion viene eseguito con l’utente del file config.ru)

Il fatto è che io ho una applicazione che è www.cyberservices.it e ho
fatto anche questo sito di prova per cui in questo momento ho due
applicazioni e purtroppo essendo molto analfabeta in inglese non ho
capito bene le istruzioni della guida, in particolare credo si tratti
della configuraione del httpd-vhosts.conf mediante istruzioni del tipo

<VirtualHost *:80>

RailsBaseURI /app1
RailsBaseURI /app2
RailsBaseURI /app3

RailsBaseURI va usato quando vuoi più applicazioni rails sotto lo stesso
dominio, ad esempio:

www.example.com/prima_app
www.example.com/seconda_app

se invece vuoi due applicazioni su due domini (o sottodomini) diversi,
basta creare un secondo virtualhost, ad esempio:

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot “/var/www/htdocs/cyber-prova2/public”
ServerName cyber-prova2.example.com
RailsEnv production
PassengerLogLevel 3
ErrorLog “/var/log/httpd/cyber-prova2-error_log”
CustomLog “/var/log/httpd/cyber-prova2-access_log” common
<Directory /var/www/htdocs/cyber-prova2/public >
Options -MultiViews
AllowOverride all
Order deny,allow
Allow from all

Spero di esserti stato utile.
Se queste informazioni non ti dovessero bastare per risolvere il
problema, posta un po più di informazioni dai log di rails e di apache.


Duilio R.
http://sinetris.info

una piccola integrazione, se non ricordo male, nella guida
Phusion Passenger users guide, Apache version,
vi è scritto che si dovrebbe inserire un file vuoto nella directory
/tmp/restart.txt della mia applicazione, che ho prontamente fatto
tramite il comando touch restart.txt.
Il fatto è che io ho una applicazione che è www.cyberservices.it e ho
fatto anche questo sito di prova per cui in questo momento ho due
applicazioni e purtroppo essendo molto analfabeta in inglese non ho
capito bene le istruzioni della guida, in particolare credo si tratti
della configuraione del httpd-vhosts.conf mediante istruzioni del tipo

<VirtualHost *:80>

RailsBaseURI /app1
RailsBaseURI /app2
RailsBaseURI /app3

grazie per la pazienza… e per i suggerimenti.

Ciao ragazzi, ho ancora quel problemino con l’applicazione cyber-prova,
e credo proprio che sia una questione di permessi
Nel VPS remoto la condizione è questa
l’applicazione è stata generata come root ma poi ho modificato utente e
permessi e quindi con il comando ls - alt si nota che i permessi della
directory sono questi:

drwxrwxrwx 13 romeo users 4096 2010-12-11 19:39 cyber-prova/

l’errore indicato da production.log è questo

Started POST “/posts” for 94.xxx.xxx.xxx at 2010-12-11 23:45:57 +0100
Processing by PostsController#create as HTML
Parameters: {“utf8”=>“â<9C><93>”,
“authenticity_token”=>“NyWpQgfqrSIREja273dU18REePA5L4i8VTqEcbuyLaQ=”,
“post”=>{“name”=>“s”, “title”=>“ss”, “content”=>“sss”},
“commit”=>“Create Post”}
Completed in 47ms

ActiveRecord::StatementInvalid (SQLite3::ReadOnlyException: attempt to
write a readonly database: INSERT INTO “posts” (“name”, “title”,
“content”, “created_at”, “updated_at”) VALUES (‘s’, ‘ss’, ‘sss’,
‘2010-12-11 22:45:57.832125’, ‘2010-12-11 22:45:57.832125’)):
app/controllers/posts_controller.rb:46:in block in create' app/controllers/posts_controller.rb:45:increate’

Ne pc di casa posso risolvere il problema semplicemente creando un
utente per passenger (PassengerDefaultUser ruby ) e inserendolo in
httpd.conf
ma non posso farlo nel VPS, mi richiederebbe le credenziali di
accesso…)
qualcuno mi sa indicare qualche possibile soluzione?
grazie per la cortesia
(grazie Duilio per i suggerimenti)

Ciao Ragazzi,
ho risolto il problemino e mi sembra giusto far partecipi altri
dilettanti come me che si imbattono in cose analoghe.
“Il problemino” erano i permessi che devono essere dati correttamente,
sul sito cyber-prova ho dato i permessi solo al livello della radice con
chmod 777 e quindi non davo la possibilità agli utenti di accedere in
scrittura alla /db ecc.
Sul pc di casa, avendo creato l’utente per passenger al livello di
httpd.conf o inserendolo nel httpd-vhosts.conf, non riscontravo nessun
problema, ma non potevo fare lo stesso con il VPS remoto.
E’ bastato dare i giusti permessi e anche con l’applicazione remota sono
riuscito a risolvere il problemino.
su quello di casa, anche senza l’utente privilegiato di passenger,
settando i permessi per la dir con chmod -R 777 cyber-prova,
l’applicazione funziona.
Credo però sia meglio settare i permessi in modo più occulato per una
applicazione pubblica.
Ringrazio tutti quelli che mi hanno dato dei suggerimenti utili e spero
un giorno di poter fare altrettanto.