如何设计gem使其应用程序文件夹可用于Rails?

jua*_*tas 2 ruby ruby-on-rails ruby-on-rails-3

我看到他们的app文件夹,但我看不出这个文件夹是如何提供给Rails的.

我的尝试是寻找railtieviews_path,因为我感兴趣的书面意见共享和辅助文件的瑰宝.我怎样才能做到这一点?

我在哪里可以找到关于此的文档?我应该google什么关键字:铁路,引擎?

Gab*_*lli 6

像Devise这样的宝石使用Rails中的一个名为Engines的功能.

引擎基本上允许您构建自己的功能部件并将它们无缝地插入到另一个应用程序中,从而有效地使引擎中的视图,模型和控制器可用,就好像它们是其中的一部分一样.

Rails引擎不仅是一种在宝石中提供功能的好方法,而且通过将各种功能组合在一起,也可以很好地保持自己的应用程序整洁.

如果你想了解细节,Rails Engine只是一种特殊的Rack应用程序.因此,它可以通过Rails路由器安装.简单来说,Rails路由器检测这些应用程序已经"挂载"的路径的请求,并将它们路由到引擎而不是普通控制器提供的控制器.


确保不要将这个概念与Omniauth使用的其他宝石混淆.

这样的宝石反而提供了Rack Middleware,它不一定需要通过Rails路由器集成到应用程序中.

你需要更多地了解Rack以了解它是如何工作的,但实际上每个对应用程序的请求都会在实际命中Rails路由器之前通过像Omniauth这样的中间件.所述中间件可以自己响应请求(基本上使其停止并且永远不会到达路由器和应用程序的其余部分),或"增加"请求(例如,Omniauth检查并执行身份验证,然后将数据存储在请求中env)将请求传递给下一个中间件.