2011-07-28 7 views

Respuesta

37

Es, básicamente, tiene que hacer dos cosas:

Usted necesita decir el router rieles que una cierta ruta URL es para ser manejado por otra aplicación Rack (en su caso una aplicación Sinata). Esto puede hacerse mediante la adición de esto a su routes.rb:

match "/sinatra" => MySinatraApp, :anchor => false 

Una vez hecho esto, usted puede crear su aplicación, así:

class MySinatraApp < Sinatra::Base 
    get "/" do 
    "Hello Sinatra World" 
    end 
end 

El segundo paso ahora es decirle a su aplicación a Sinatra utilice el diseño de rieles que por defecto vive en app/views/layouts/application.html.erb para Rails 3.1. de forma predeterminada, Sinatra usa ./views/layout.ext (siendo ext la extensión de su sistema de plantilla elegido).Así que, básicamente, tiene que decirle a Sinatra

  1. uso otro directorio para encontrar puntos de vista y diseños en lugar de la opción predeterminada ./views
  2. uso otro archivo de plantilla como el diseño predeterminado.

Tanto se puede lograr mediante el establecimiento de lo siguiente en su aplicación Sinatra:

set :views, "/path/to/your/railsapp/views" 
set :erb, layout => :"layout/application" # or whatever rendering engine you chose 
+0

El problema aquí es que no se puede Sinatra manejar los ayudantes de rieles que uso en el diseño de mis rieles (y los diversos complementos de rieles) – Mike

+2

Bueno, entonces tal vez deberías quedarte con Rails. La belleza de Sinatra es que viene sin muchas cosas que no necesitarías en ciertos entornos. Pero si ya tiene la infraestructura que necesita (ayudantes, complementos, ...), no tiene mucho sentido dejar eso atrás. Usa Sinatra para las áreas que pueden sostenerse por sí mismas. –

+0

Claro que solo quería construir una mini extensión para mi aplicación que pudiera ser reutilizable por múltiples aplicaciones de rack. Pero me quedaré con los motores de rieles. – Mike

3

compartir el mismo diseño, se puede apuntar Sinatra a la carpeta donde el diseño es en su raíles aplicación: (tomadas desde aquí: http://www.sinatrarb.com/configuration.html)

: vistas - plantilla de vista directorio Una cadena que especifica el directorio donde se encuentran las plantillas de vista. De forma predeterminada, se supone que es un directorio denominado "vistas" dentro del directorio raíz de la aplicación (consulte la configuración raíz). La mejor manera de especificar un nombre alternativo directorio dentro de la raíz de la aplicación es el uso de un valor diferida que hace referencia al: ajuste de la raíz:

set :views, Proc.new { File.join(root, "templates") } 

Desde su aplicación Rails se puede construir un método que se puede llamar desde la acción donde se debe incluir la aplicación sinatra en la vista. (dado que desea utilizar la acción index para este)

def index 
    @sinatra_content = get_sinatra 
end 
# use @sinatra_content in your views for rendering 

def get_sinatra 
    sinatra_ip = 127.0.0.1; 
    sinatra_port = 4567; 
    #start a request here 
    RestClient.get 'http://#{sinatra_ip}:{sinatra_port}/', {:params => {:id => 50, 'foo' => 'bar'}} 
end 

ver cómo resto-cliente trabaja aquí: https://github.com/archiloque/rest-client y no se olvide de incluir la joya en su aplicación rieles.

Para utilizar enlaces en su aplicación Sinatra debe decidir si Sinatra debe manejar esto (punto de aplicación Sinatra (con puerto) o construir vínculos de su aplicación Sinatra, que son manejados por su raíles APP)

+1

Muy buen truco, creo que el único problema es que puede ser lento http – Mike

1

creo que usando el append_view_path en su aplicación de rieles funcionará un poco mejor. Simplemente agregue las vistas de Sinatra a su aplicación Rails y se verá allí después de buscar en la aplicación/vistas.

El libro de aplicaciones de Crafting Rails de José Valim tiene mucha documentación sobre ese tema (representación de vistas de otras fuentes), es posible que desee ver eso.

Además, esta Railscasts pueden ayudar: http://railscasts.com/episodes/222-rack-in-rails-3

Cuestiones relacionadas