2011-11-15 8 views
6

Ho un'app per rails che mi piace sviluppare su un server molto più che localmente, computer lento, il problema è anche se sul server l'ambiente di sviluppo è ottimo ho bisogno un modo per guardare le pagine su cui sto lavorando dal vivo.Mimic .htaccess o qualche altro tipo di protezione con password con webrick

Questo è piuttosto facile se non mi interessa che l'app sia visibile al pubblico ma non può essere visibile da nessuna parte tranne sul server di produzione.

Quindi mi è venuta l'idea di mettere semplicemente un httpauth di base e solo ora riesco a vedere l'app per i binari ma è ancora ospitata sul server.

Se dovessi farlo con apache/php, userei un file .htaccess per proteggere la directory ma non ho idea di come proteggere l'applicazione dal pubblico usando WEBrick.

Se qualcuno ha qualche idea mi piacerebbe davvero non avere modifiche al codice o solo modifiche al codice nei file che posso .gitignore quindi la distribuzione è ancora facile.

+0

Sei bloccato su WEBrick o l'impostazione di apache + passeggero potrebbe essere un'opzione per te? Quindi sarebbe facile usare solo un file .htaccess o .passwd per l'autenticazione di base.Nella mia mente, non dovresti introdurre alcuna codifica nell'app che dipenda da WEBrick. – emrass

+0

È per un ambiente di sviluppo quindi non penso che il passeggero sia una buona idea – austinbv

risposta

3

È possibile limitare l'accesso utilizzando Rack basato basic auth o IP white listing

Basic Auth

Aggiungi quanto segue al tuo config/environments/development.rb

config.middleware.use Rack::Auth::Basic, "Beta Access" do |username, password| 
    'secret' == password 
end 

IP Elenco dei white

ho trovato due gemme per questo scopo:

rack-auth-ip

rack-ip-whitelist

vorrei utilizzare rack-auth-ip come è stato lì per un po ' tempo. Aggiungere quanto segue al config/environments/development.rb

config.middleware.use Rack::Auth::IP, %w(YourIPAddress) 

Ora, l'istanza è accessibile solo se l'origine IP è nella lista bianca.

+0

Ho aggiunto una sezione per l'autenticazione di base nella mia risposta, dai uno sguardo. –

2

Questa domanda Ruby Webrick HTTP Authentication sembra dare una risposta

Ecco un link ad alcuni Webrick docs. Sembra che avete bisogno di qualcosa in questo modo, dal link qui sopra:

realm = "Gnome's realm" 
start_webrick {|server| 
    server.mount_proc('/convenient_basic_auth') {|req, resp| 
    HTTPAuth.basic_auth(req, resp, realm) {|user, pass| 
     # this block returns true if 
     # authentication token is valid 
     user == 'gnome' && pass == 'supersecretpassword' 
    } 
    resp.body = 
     "You are authenticated to see the super secret data\n" 
    } 
} 

e un link al rdocon WEBrick/HTTPAuth

config = { :Realm => 'DigestAuth example realm' } 

htpasswd = WEBrick::HTTPAuth::Htpasswd.new 'my_password_file' 
htpasswd.auth_type = WEBrick::HTTPAuth::DigestAuth 
htpasswd.set_passwd config[:Realm], 'username', 'password' 
htpasswd.flush 
+0

Quindi per un'applicazione di rails 3.1 ciò richiederebbe la modifica della gemma delle rotaie? – austinbv

+0

Sembra così. –

+0

che è un dolore nella parte posteriore per il codice di sviluppo. – austinbv

1

A meno che non si sia bloccati con WEBrick, una soluzione migliore sarebbe quella di utilizzare nginx quale proxy per unicorno. Ecco un buon tutorial: here

2

Mi dispiace se mi manca qualcosa qui, ma perché non dovrebbe funzionare l'autenticazione di base HTTP integrata di Rails?

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    http_basic_authenticate_with :name => "dhh", :password => "hatezgroupon", :if => lambda { Rails.env.development? } 
end 
Problemi correlati