2015-04-10 19 views
12

Ho un server proxy A che tutto il traffico su /rails al server B.Running Rails + Passenger + Devise da una sottodirectory?

Così ho messa a punto questo host virtuale, e la maggior parte delle cose funzionano ... va bene. link_to è danneggiato e genera url a /users rispetto a /rails/users, ma posso aggirare il problema.

Se si imposta config.action_controller.relative_url_root su /rails, i miei percorsi funzionano correttamente ECCETTO tutti i percorsi di devise. Indicano l'URL nudo. Come configurare correttamente il server B per capire che è in esecuzione in una sottodirectory e generare collegamenti e rotte correttamente?

<VirtualHost *:80> 
    ServerName http://ec2-url.compute-1.amazonaws.com/ 
    SetEnv RDS_HOSTNAME "mydb..." 
    SetEnv RAILS_RELATIVE_URL_ROOT "/rails" 

    DocumentRoot /home/ubuntu/myapp/public 
    RailsEnv staging 
    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/app.log combined 
    PassengerLogLevel 3 
    <Directory "/home/ubuntu/myapp/public"> 
Options FollowSymLinks 
    AllowOverride None 
    Order allow,deny 
    Allow from all 
    Options -MultiViews 
    Require all granted 
    </Directory> 
</VirtualHost> 

Sto usando Rails 4.

+0

quale versione di rotaie stai usando? – johnsorrentino

+0

Aggiunto alla domanda. –

risposta

5

Nei file dell'ambiente, aggiungere una configurazione per OmniAuth.config.full_host.

OmniAuth.config.full_host = 'http://myfullurl/subdir'

Ora, in application_controller.rb, aggiungere questo metodo:

def after_sign_in_path_for(resource_or_scope) 
    path = super(resource_or_scope) 
    "#{OmniAuth.config.full_host}#{path}" 
end 
0

sarebbe bello se si condivide il routes.rb, ma penso che il modo più semplice per cambiare ideare percorsi è quello di mettere qualcosa di simile a quanto segue in routes.rb

scope '/rails' do 
    devise_for :users 
end 
+1

Questo crea percorsi come/rails/rails –

+0

Non capisco. Per prima cosa dici che ideare percorsi come "/" (puntano all'URL). E con scope genera un doppio scope ??? – Aguardientico

+0

@StefanKendall Provare quanto segue: http://quickhack.net/nom/blog/2012-09-19-rails-with-relative-url-root.html è in giapponese ma gli esempi sono in inglese semplice – Aguardientico