私はレールアプリにsinatraアプリケーションを搭載したいと思います。 しかし、私はこのレイアウトが同じレイアウトを共有したいと思います。レールアプリと共有レイアウトの中にSinatraアプリをマウント
iframeは動作する可能性がありますが、その他の考えはありますか?
おかげ
私はレールアプリにsinatraアプリケーションを搭載したいと思います。 しかし、私はこのレイアウトが同じレイアウトを共有したいと思います。レールアプリと共有レイアウトの中にSinatraアプリをマウント
iframeは動作する可能性がありますが、その他の考えはありますか?
おかげ
をあなたは基本的に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
は、選択したテンプレートシステムの拡張版です)。だから、基本的には、代わりにデフォルトのビューやレイアウトを見つけるために、別のディレクトリを使用し
./views
どちらがあなたのシナトラアプリで次のように設定することによって達成することができます。
set :views, "/path/to/your/railsapp/views"
set :erb, layout => :"layout/application" # or whatever rendering engine you chose
同じレイアウトを共有するために、あなたはレイアウトがあなたのレールのアプリであるフォルダにシナトラ指すことができますが: (ここから取ら: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
が残り、クライアントがここでどのように動作するかを参照してください。
シナトラはこの(ポートとシナトラアプリにポイントを()したり、レールのアプリで処理され、あなたのシナトラアプリでリンクを構築)を扱う必要がある場合は、決定する必要があり、あなたのシナトラアプリ内のリンクを使用するには
非常に素晴らしいトリック、私は唯一の問題は、HTTPが – Mike
私はと思いますあなたのレールアプリケーションでappend_view_path
を使うと少しうまくいくでしょう。 SinatraビューをRailsアプリケーションに追加するだけで、app/viewsを参照した後にSinatraビューが表示されます。
JoséValimによるCrafting Rails Applicationsの書籍には、そのトピック(他のソースからのレンダリングビュー)に関する多くのドキュメントがあります。
また、このRailscastsは助けることができる:http://railscasts.com/episodes/222-rack-in-rails-3
遅くなることができることをここでの問題は、シナトラができないということであると思います私は自分のレールレイアウト(と様々なレールプラグイン)で使用するレールヘルパーを扱います – Mike
それでは、あなたはRailsを使うべきでしょう。 Sinatraの美しさは、それがあなたが特定の環境では必要としない多くのものなしで来るということです。しかし、必要なインフラストラクチャー(ヘルパー、プラグインなど)が既にある場合は、それを残しておくのはあまり意味がありません。代わりに独自の立場に立つことができる領域にはSinatraを使用してください。 –
もちろん、アプリに複数のラックアプリケーションで再利用可能なミニエクステンションを構築したかっただけです。しかし、私はレールエンジンに固執します。 – Mike