2011-11-15 11 views
6

Tengo una aplicación de rieles que me gusta desarrollar en un servidor mucho más que localmente, computadora lenta, el problema es que aunque en el servidor el entorno de desarrollo es grandioso, necesito una forma de ver las páginas en las que estoy trabajando en vivo.Mimic .htaccess o algún otro tipo de contraseña de protección con webrick

Esto es bastante fácil si no me importa que la aplicación sea visible para el público, pero no puede verse en ninguna parte excepto en el servidor de producción.

Así que tuve la idea de simplemente poner un httpauth básico y luego solo puedo ver la aplicación Rails pero aún está alojada en el servidor.

Si estuviera haciendo esto con apache/php solo usaría un archivo .htaccess para proteger el directorio, pero no tengo ni idea de cómo proteger la aplicación del público mediante WEBrick.

Si alguien tiene alguna idea, realmente me gustaría no tener cambios de código o solo cambios de código en los archivos que puedo .gitignore, por lo que la implementación sigue siendo fácil.

+0

¿Está atascado en WEBrick o sería la instalación de apache + pasajero una opción para usted? Entonces sería fácil simplemente usar un archivo .htaccess o .passwd para autenticación básica.En mi opinión, no debes introducir ninguna codificación en tu aplicación que dependa de WEBrick. – emrass

+0

Es para un entorno de desarrollo, así que no creo que el pasajero sea una buena idea – austinbv

Respuesta

3

Puede restringir el acceso mediante el uso de rack basado basic auth o IP white listing

Aut. Básica

Agregue lo siguiente a su config/environments/development.rb

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

IP de listas blancas

me encontré con dos joyas para este propósito:

rack-auth-ip

rack-ip-whitelist

usaría rack-auth-ip, ya que ha estado allí durante algún hora. Añadir lo siguiente a su config/environments/development.rb

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

Ahora, la instancia es accesible sólo si la IP de origen está en la lista blanca.

+0

He agregado una sección para autenticación básica en mi respuesta, eche un vistazo. –

2

Esta pregunta Ruby Webrick HTTP Authentication parece dar una respuesta

Aquí hay un enlace a alguna Webrick docs. Parece que necesita algo así como lo que, desde el enlace anterior:

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" 
    } 
} 

y un enlace a la 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

¿Entonces para una aplicación de rieles 3.1 esto requeriría modificar la gema de los rieles? – austinbv

+0

Parece que sí. –

+0

que es un dolor en la parte posterior para el código de desarrollo. – austinbv

1

A menos que estés atascado con WEBrick, una mejor solución sería usar nginx que proxys al unicornio. Aquí hay un buen tutorial: here

2

Disculpa si me falta algo aquí, pero ¿por qué la autenticación http básica de Rails no funcionaría para ti?

class ApplicationController < ActionController::Base 
    protect_from_forgery 

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