Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    7

    Deployment di un progetto rails 2.1

    Salve

    devo far funzionare un progetto rails (versione 2.1 installato su gems 1.1.1) su un server apache con cgi ( o forse sarebbe meglio fastCGI)

    il progetto l'ho sviluppato prima tutto in locale, non pensando che sarebbe stato così ostico deployarlo, altrimenti sarei andato per passi incrementali.

    Sul server ci sono installate le gems 1.0.1 con rails versione 2.0.1, tuttavia mi è stato detto che con un task di rake è possibile salvare la versione di rails nell'applicazione. Domani tento di scoprire come.

    Qualcuno può darmi qualche consiglio per rendere il tutto funzionante? onestamente non ho mai avuto l'occasione di cimentarmi in questo genere di attività, quindi avrei bisogno di alcune dritte.

    Per ora sabato ho semplicemente loggato tramite ssh alla mia home sul server e copiato la mia cartella locale del progetto, fondamentalmente sperimentando, ma sempre scontrandomi col prolema della versione (neppure un 'rake --tasks' va) che però conto di risolvere appena scopro il task di rake adeguato.
    Ho anche provato a commentare la riga in config/environment.rb che definisce la versione bypassando il controllo ma dà cmq errore su una successiva istruzione (che imposta il formato dei timestamp in utc) la quale effettivamente nella precedente versione di rails era diversa (in pratica il nuovo metodo non esiste)

    grazie per qualsiasi consiglio

  2. #2
    Innanzi tutto il primo passo che ti consiglio è di uniformare quanto possibile il tuo ambiente locale a quello di production.
    Se in locale hai 2.1 aggiorna anche production o fai il downgrade della versione in locale.

    Per scoprire i comandi di rake disponibili digita

    codice:
    rake -T

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    7
    dunque il server non è mio ma dell'università, non ho una macchina virtuale a disposizione ma solo un utente con una home.

    fondamentalmente per ora ho usato rake rails:freeze:gems sul progetto in locale, l'ho copiato sul server nella mia home.. poi ho creato un link simbolico alla cartella public.

    I contenuti statici funzionano, la index di default di rails la visualizza (anche se dà errore nel link per testare l'environment).

    Su mysql ho solo un database e nessun privilegio per crearne di nuovi. Ergo ho editato con le info di accesso e la socket giusta il file databases.yml nella voce production. Di seguito via console ho settato manualmente la variabile di ambiente RAILS_ENV a 'producion' e ho dato rake db:migrate, che ha avuto successo creando le tabelle giuste e i contenuti esatti.

    Da qui devo far funzionare i contenuti dinamici.

    Ho cambiato i permessi in log/ e tml/ a 0666 e quelli nella cartella app/ in 0755.
    Ho recuperato un sample di .htaccess e definito RewriteBase con l'indirizzo sul server della mia home scrivendo

    RewriteBase /~home/

    assicurandomi l'esistenza della riga

    RewriteRule ^(.*)$ dispatch.cgi [QSA,L]

    per usare cgi, non avendo installato sul server nè mod_ruby nè (mi pare) fastCGI.
    Ho poi editato la prima riga di dispatch.cgi con il path dato da `which ruby`.

    Spero di non aver dimenticato nulla.

    Risultato di tutto questo: quanto tento di accedere alla index 'server.it/~home' visualizza giusto il cntenuto statico (tranne la tendina dell'environment). Se tento di accedere ad un controller 'server.it/~home/controller' mi trovo un redirect loop che riempie di entry il log rails (non error_log di apache) di entry

    Processing NovelController#index (for <<ip>> at 2008-09-09 17:10:58) [GET]
    Session ID: BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2 g6OkZsYXNo
    SGFzaHsABjoKQHVzZWR7AA==--749f8872bdd6166cabbd2bcb169c6de949eef913
    Parameters: {"action"=>"index", "controller"=>"controller"}
    WARNING: You're using the Ruby-based MySQL library that ships with Rails. This library is not suited for production. Please install the C-based MySQL library instead (gem install mysql).
    Redirected to server.it/~home/controller
    Completed in 0.02467 (40 reqs/sec) | DB: 0.00566 (22%) | 302 Found [server.it/~home/controller]

    (ho editato gli indirizzi ip e url)
    Il warning non credo sia pertinente col problema che ho adesso e cmq suppongo possa essere ignorato visto che se fosse un problema di db si manifesterebbe in maniera diversa.
    altro risultato collaterale è un gran mal di testa

  4. #4
    dunque il server non è mio ma dell'università, non ho una macchina virtuale a disposizione ma solo un utente con una home.
    Puoi tranquillamente creare un repository GEM all'interno di una qualsiasi cartella, anche solo della tua home directory.

    Per quanto riguarda il deploy, premesso che usando Capistrano fai in 1 minuto quello che altrimenti faresti in ore, procedi così.

    1. Fai un checkout dell'intera cartella dal repository in una cartella della homedir.
    Se usi svn

    svn checkout svn://path/repos/apps homedir/~user/apps

    2. Entra in apps ed assicurati di avere i file dispatch.cgi ed il seguente .htacess

    codice:
    AddHandler cgi-script .cgi
    Options +FollowSymLinks +ExecCGI
    
    # If you don't want Rails to look in certain directories,
    # use the following rewrite rules so that Apache won't rewrite certain requests
    # 
    # Example:
    #   RewriteCond %{REQUEST_URI} ^/notrails.*
    #   RewriteRule .* - [L]
    
    # Redirect all requests not available on the filesystem to Rails
    # By default the cgi dispatcher is used which is very slow
    # 
    # For better performance replace the dispatcher with the fastcgi one
    #
    # Example:
    #   RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
    RewriteEngine On
    
    # If your Rails application is accessed via an Alias directive,
    # then you MUST also set the RewriteBase in this htaccess file.
    #
    # Example:
    #   Alias /myrailsapp /path/to/myrailsapp/public
    #   RewriteBase /myrailsapp
    
    RewriteRule ^$ index.html [QSA]
    RewriteRule ^([^.]+)$ $1.html [QSA]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
    
    # In case Rails experiences terminal errors
    # Instead of displaying this message you can supply a file here which will be rendered instead
    # 
    # Example:
    #   ErrorDocument 500 /500.html
    
    ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
    3. Controlla il file di configurazione del database.

    4. I permessi di tmp, log devono essere writable per l'utente web. Nel tuo caso non lo erano.
    Verifica chi è l'utente web e setta i permessi appropriati. Di norma cgi non viene eseguito dallo stesso utente unix per cui ti tocca dare i permessi di scrittura oltre che a owner, anche a group (se il tuo account è nello steso gruppo di chi esegue cgi, in genere www-data) o addirittura 777 se il tuo utente e quello che esegue l'app non condividono nulla.

    5. Avvia l'applicazione da http://il/persorco/pubblico/homedir/~user/apps/public

    Ricordati che in teoria solo /public dovrebbe essere mappata all'esterno.
    Quindi se hai la possibilità di configurare un vhost punta la directory pubblica a public, altrimenti devi inibire l'accesso pubblico a tutte le altre cartelle o chiunque potrà vedere i tuoi file di configurazione.

    Inoltre, ricordati che di default l'environment caricato è development se non specifichi una diversa impostazione.
    Su fastcgi e cgi, l'unico modo di cambiare impostazione è agire su una variabile d'ambiente o impostare l'environment in config/environment.rb.

    Infine, se hai problemi ad eseguire spostati nella root dell'applciazione e lancia il comando

    ruby public/dispatch.cgi

    Ora hai l'errore a video.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    7
    Il problema però è che se cerco di visualizzare l'index di un controller mi dà un redirection loop.
    Provato sia con apache che con webrick e il problema è lo stesso, una serie di risposte http di redirezioni.

    [09/Sep/2008:18:28:23 CEST] "GET /controller HTTP/1.1" 302 109
    - -> /controller

    Lo stesso codice sulla mia macchina però funziona perfettamente.

  6. #6
    Hai messo l'htaccess che ti ho postato io?
    Cosa c'è scritto nel log di Rails?
    Come hai configurato il file di routing?

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    7
    il mio .htaccess lo avevo esattamente identico al file postato qui sopra.
    Non ho ancora configurato il file route.rb
    Il log di rails a riguardo è candido, tranne un paio di warning
    "warning: don't put space before argument parentheses" dovuti ad altre action, non l'index.

    Ho però scoperto una cosa interessante. Se salto direttamente ad altre pagine come il controller/action login/login, tutto funziona. Mi spiego: è un sito che tratta di romanzi, dove si puo recensirli, commentarli, taggarli, ecc. Ho inserito un romanzo, l'ho modificato, taggato, commentato. l'unica cosa che non va è la pagina iniziale dove mostro gli ultimi 6 romanzi segnalati.

  8. #8
    Ma se non hai configurato le route, come puoi pensare che funzionino?

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    7

    ammetto di non essere esperto, però con le semplici route di default in route.rb dovrebbe tranquillamente mappare l'index di un controller.

    ho comunque aggiunto prima la route

    map.connect "novel/", :controller => 'novel', :action => 'index'

    senza successo. Il resto del sito (e anche le alter index) le visualizza correttamente.
    Mi sfugge certamente qualcosa.

  10. #10

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.