Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将Sinatra应用程序装入rails应用程序并共享布局_Ruby On Rails_Ruby On Rails 3_Sinatra_Rack - Fatal编程技术网

Ruby on rails 将Sinatra应用程序装入rails应用程序并共享布局

Ruby on rails 将Sinatra应用程序装入rails应用程序并共享布局,ruby-on-rails,ruby-on-rails-3,sinatra,rack,Ruby On Rails,Ruby On Rails 3,Sinatra,Rack,我想在我的rails应用程序中安装sinatra应用程序。 但我希望这一个共享相同的布局 iframe可以工作,但您还有其他想法吗 感谢共享相同的布局,您可以将sinatra指向rails应用程序中布局所在的文件夹: (摘自此处:) :views-查看模板目录指定目录的字符串 视图样板所在的位置。默认情况下,这被假定为 应用程序根目录中名为“视图”的目录(请参阅 方法:根设置)。指定替代目录的最佳方法 应用程序根目录中的名称将使用延迟值 引用:根设置: set :views, Proc.ne

我想在我的rails应用程序中安装sinatra应用程序。 但我希望这一个共享相同的布局

iframe可以工作,但您还有其他想法吗


感谢共享相同的布局,您可以将sinatra指向rails应用程序中布局所在的文件夹: (摘自此处:)

:views-查看模板目录指定目录的字符串 视图样板所在的位置。默认情况下,这被假定为 应用程序根目录中名为“视图”的目录(请参阅 方法:根设置)。指定替代目录的最佳方法 应用程序根目录中的名称将使用延迟值 引用:根设置:

  set :views, Proc.new { File.join(root, "templates") }
从Rails应用程序中,您可以构建一个方法,您可以在视图中包含sinatra应用程序的操作中调用该方法。 (假设您希望为此使用索引操作)

看看rest客户端是如何工作的:别忘了在rails应用程序中包含gem


要在你的sinatra应用程序中使用链接,你应该决定sinatra是否应该处理这个问题(指向sinatra应用程序(带端口)或在你的sinatra应用程序中构建链接,这些链接由你的rails应用程序处理)

我认为在你的rails应用程序中使用
附加视图路径将更好一些。只需将Sinatra视图附加到Rails应用程序中,它就会在应用程序/视图中查看

JoséValim的《手工制作Rails应用程序》一书中有很多关于该主题的文档(从其他来源呈现视图),您可能想看看


此外,Railscasts还可以提供帮助:

您基本上需要做两件事:

你需要告诉Rails路由器某个URL路径将由另一个Rack应用程序(在你的例子中是Sinata应用程序)处理。这可以通过将其添加到routes.rb中来实现:

match "/sinatra" => MySinatraApp, :anchor => false
完成后,您可以这样创建应用程序:

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

非常好的技巧,我认为唯一的问题是http速度慢。这里的问题是Sinatra无法处理我在rails布局中使用的rails助手(以及各种rails插件),那么也许你应该坚持使用rails。Sinatra的美妙之处在于它没有很多在特定环境下你不需要的东西。但是,如果您已经拥有了所需的基础设施(助手、插件等等),那么将其抛在脑后就没有多大意义了。将Sinatra用于可以独立运行的区域。当然,我只是想为我的应用程序构建一个小型扩展,可以被多个机架应用程序重用。但我会坚持使用rails引擎。根据您实际想要实现的目标,您也可以尝试使用机架中间件。你可以让你的rails应用程序发出带有特定关键字的页面,这些关键字随后会被过滤链中的中间件所取代。如果你做复杂的事情,这是不干净的,但对于简单的,独立的事情,这可能是好的。
class MySinatraApp < Sinatra::Base
  get "/" do
    "Hello Sinatra World"
  end
end
set :views, "/path/to/your/railsapp/views"
set :erb, layout => :"layout/application" # or whatever rendering engine you chose