为Rails应用程序构建ruby gem

tsd*_*own 18 rubygems ruby-on-rails ruby-on-rails-plugins

作为一个Rails开发人员,我觉得有点愚蠢地问这个问题,但希望我会学到一些新东西,有人可以让我摆脱困境!在我的rails应用程序中,我一直使用(其他人)宝石,我也使用来自社区或我自己的插件.

我理解使用宝石而不是插件的好处,因为它们是版本,分段,系统范围,更易于管理和共享等等,但我真的不知道如何为我的rails应用程序制作宝石!?

你总是从一个插件开始并将其转换为宝石,我已经看到了"将它打包为宝石"这几个字.另外我正在考虑构建的宝石在普通的ruby程序中并不好用,它只对rails应用程序有用.我甚至不确定它的语义是否有意义,'RubyGem'只适用于rails应用程序!?

我想创建一个gem(如果这是我应该使用的?),为我的rails应用程序提供一个独立的功能.它需要添加数据库迁移,新路由并提供控制器和视图或有用的视图助手.我知道我可以通过一个插件来实现这个目标,但是我想知道如何/为什么要将它作为'Ruby Gem'来实现?

Sim*_*tti 7

为了避免过度工程的风险,我通常从我需要的功能开始直接进入应用程序.然后,只要我需要将相同的功能用于另一个项目,我就会检查是否值得将其提取到插件中,甚至是提供API的单独应用程序.

插件和宝石通常可以互换.Gems在可重用性和可维护性方面提供了几个显着的优势.另一方面,有一些具体的已知问题.例如,Rails应用程序实际上无法加载定义到打包为Gem的插件中的rake任务.

几乎每个Rails插件都可以打包为Gem.例如,拿我的tabs_on_rails插件.

您可以将其安装为Gem,指定对environment.rb的依赖性.或者您可以script/plugin install按预期使用命令.

如果要获得相同的结果,请确保遵循标准Gem布局并提供init.rbRails所需的初始化脚本.此外,当插件作为标准Rails插件安装时,您可能希望创建一个install.rbuninstall.rb文件以包含安装后和安装后挂钩.

最后但同样重要的是,如果将插件打包为Gem,则可以在非Rails项目中重用它,并使用该init.rb文件提供特定于Rails的初始化.非Rails应用程序将忽略它.