2011-07-28 7 views

答えて

37

をあなたは基本的に2つのことを行う必要があります。

あなたは、特定のURLパスがに(別のラックアプリによって処理されるRailsのルータに伝える必要がありますあなたの場合はSinataアプリ)。これはあなたのroutes.rbをにこれを追加することによって行うことができます。

そうのようなアプリを作成できる、という終われば
match "/sinatra" => MySinatraApp, :anchor => false 

:今

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

第2のステップはにあなたのシナトラアプリを伝えることですRails 3.1の場合、デフォルトでapp/views/layouts/application.html.erbにあるレールレイアウトを使用してください。 Sinatraはデフォルトで./views/layout.extを使用しています(extは、選択したテンプレートシステムの拡張版です)。だから、基本的には、代わりにデフォルトのビューやレイアウトを見つけるために、別のディレクトリを使用し

  1. ./views
  2. をシナトラを伝える必要があり、デフォルトのレイアウトとして他のテンプレートファイルを使用します。

どちらがあなたのシナトラアプリで次のように設定することによって達成することができます。

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

遅くなることができることをここでの問題は、シナトラができないということであると思います私は自分のレールレイアウト(と様々なレールプラグイン)で使用するレールヘルパーを扱います – Mike

+2

それでは、あなたはRailsを使うべきでしょう。 Sinatraの美しさは、それがあなたが特定の環境では必要としない多くのものなしで来るということです。しかし、必要なインフラストラクチャー(ヘルパー、プラグインなど)が既にある場合は、それを残しておくのはあまり意味がありません。代わりに独自の立場に立つことができる領域にはSinatraを使用してください。 –

+0

もちろん、アプリに複数のラックアプリケーションで再利用可能なミニエクステンションを構築したかっただけです。しかし、私はレールエンジンに固執します。 – Mike

3

同じレイアウトを共有するために、あなたはレイアウトがあなたのレールのアプリであるフォルダにシナトラ指すことができますが: (ここから取ら:http://www.sinatrarb.com/configuration.html

:ビュー - ビューテンプレートをディレクトリビューテンプレートが配置されているディレクトリ を指定する文字列。既定では、これはアプリケーションのルートディレクトリ内に "views"という名前の ディレクトリと見なされます( :ルート設定を参照)。アプリケーションのルート内 名を代替ディレクトリを指定するための最良の方法は、参照する繰延値 を使用することです:ルートの設定:

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

あなたのRailsアプリからあなたの方法を構築することができますシナトラアプリをビューに含めるべきアクションから呼び出すことができます。 https://github.com/archiloque/rest-clientとあなたのレールのアプリで宝石を含めることを忘れないでください: は(あなたは、このためのindexアクションを使いたい与えられた)

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 

が残り、クライアントがここでどのように動作するかを参照してください。

シナトラはこの(ポートとシナトラアプリにポイントを()したり、レールのアプリで処理され、あなたのシナトラアプリでリンクを構築)を扱う必要がある場合は、決定する必要があり、あなたのシナトラアプリ内のリンクを使用するには

+1

非常に素晴らしいトリック、私は唯一の問題は、HTTPが – Mike

1

私はと思いますあなたのレールアプリケーションでappend_view_pathを使うと少しうまくいくでしょう。 SinatraビューをRailsアプリケーションに追加するだけで、app/viewsを参照した後にSinatraビューが表示されます。

JoséValimによるCrafting Rails Applicationsの書籍には、そのトピック(他のソースからのレンダリングビュー)に関する多くのドキュメントがあります。

また、このRailscastsは助けることができる:http://railscasts.com/episodes/222-rack-in-rails-3

関連する問題