Configurazione dell'app Ruby On Rails in una sottodirectory in Apache
-
19-08-2019 - |
Domanda
Ho apache2.2 su Windows. Sto cercando di servire sia Subversion (/ svn) che Redmine (/ Redmine). Ho svn funzionante bene con questa configurazione:
<Location /svn>
DAV svn
SVNParentPath C:/svn_repository
...
</Location>
Funziona benissimo: i miei utenti svn possono premere http: // mybox / svn bene.
Ora voglio aggiungere un'altra directory per un'app rails (RedMine):
Ho seguito i consigli in questa domanda per configurare un server ibrido e avere client proxy apache attraverso di esso. Funziona bene se lo faccio diventare root, ma ho problemi a farlo in una sottodirectory:
<Location /redmine>
ProxyPass http://localhost:3000/
ProxyPassReverse http://localhost:3000/
</Location>
Qualche suggerimento?
Soluzione
Ecco cosa ho dovuto cambiare:
Ho rimosso la barra finale:
<Location /redmine>
ProxyPass http://localhost:3000
ProxyPassReverse http://localhost:3000/
</Location>
E nella mia app rails:
# added to end of file C:\redmine\config\environment.rb
ActionController::AbstractRequest.relative_url_root = "/redmine"
Ora funziona!
Non ero completamente soddisfatto di questo approccio: ho riscontrato problemi di reindirizzamento. Questo è un altro tentativo che sembra funzionare bene finora.
- CGI veloce e < a href = "http://wiki.rubyonrails.org/rails/pages/Fast+CGI+and+Apache2+for+Windows+without+VirtualHosts" rel = "noreferrer"> CGI veloce senza VirtualHosts
- Tuning Fast CGI
Questo secondo approccio sembra migliore.
UPDATE:
Come notato nei commenti, per le app più recenti in esecuzione su Rails 2.3.2+, utilizzare invece questo:
config.action_controller.relative_url_root = '/redmine'
L'ho inserito nel nuovo file additional_environment.rb
.
Altri suggerimenti
Nel caso in cui desideri ancora utilizzare Mongrel + Apache utilizzando un proxy inverso, ecco come ho risolto lo stesso problema sul nostro sistema (Win2k3, Apache 2.2, trunk di Redmine). Il segreto è installare il tuo servizio ibrido usando --prefix / redmine
che gli dice di servirlo da http://localhost:port/redmine
In Apache httpd.conf (o file di inclusione adatto):
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<IfModule mod_proxy.c>
ProxyRequests Off
#No need to forward on static content - let apache do it faster
ProxyPass /redmine/images !
ProxyPass /redmine/stylesheets !
ProxyPass /redmine/javascript !
# Remove the following entry on public sites as this is insecure
ProxyPass /redmine/plugin_assets !
ProxyPass /redmine/help !
ProxyPass /redmine http://localhost:4000/redmine
ProxyPassReverse /redmine http://localhost:4000/redmine
ProxyPreserveHost On
#continue with other static files that should be served by apache
Alias /redmine/images C:/Repositories/redmine/public/images/
Alias /redmine/stylesheets C:/Repositories/redmine/public/stylesheets/
Alias /redmine/javascript C:/Repositories/redmine/public/javascript/
# Remove the following on public sites as this is insecure
Alias /redmine/plugin_assets C:/Repositories/redmine/public/plugin_assets/
Alias /redmine/help C:/Repositories/redmine/public/help/
</IfModule>
# Make sure apache can see public and all subfolders - not suitable for public sites
<Directory "C:/Repositories/redmine/public/">
Allow from all
Order allow,deny
</Directory>
Mongrel è installato come tale:
mongrel_rails service::install --prefix /redmine -N redmine_prod -p 4000 -e production -c C:\Repositories\redmine
Spero che aiuti qualcuno. Inizialmente, ho provato a configurare Apache + fastcgi ecc., Ma ho perso i capelli più preziosi - non è compatibile con Windows.
P.S. Ho trovato questo PDF un riferimento molto utile: http://www.napcsweb.com /howto/rails/deployment/RailsWithApacheAndMongrel.pdf
/ Damien
Passenger ( http://modrails.com ) è un'alternativa migliore a fastcgi perché è molto facile da configurare I consiglierei di usarlo per ospitare le tue app rails usando una configurazione simile a quella che hai ora
Sono d'accordo con Radar. Passenger è davvero facile da configurare, consente alle app Rails di condividere la memoria, elimina l'onere della gestione di un cluster di ibridi e non richiede praticamente alcuna configurazione. Tutto ciò che serve è uno speciale file 'config.ru' con un RackUp config e DocumentRoot che puntano a RAILS_ROOT / set pubblico in Apache.