为Rails应用程序构建ruby gem

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

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

你总是从一个插件开始并将其转换为gem,我已经看到了“将其打包为gem”的字样。 另外我正在考虑构建的gem在普通的ruby程序中没有用,它只对rails应用程序有用。 我甚至不确定它的语义是否有意义,’RubyGem’只能在rails应用程序中运行!?

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

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

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

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

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

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

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

如果你想为Rails创建一个插件, https://peepcode.com/products/rails-2-plugin-patterns为你提供了一个良好的开端。 之后,将插件变成gem。

要创建一个gem,这个资源http://railscasts.com/episodes/183-gemcutter-jeweler将会很有帮助。

截至2013年,您将要使用Bundler和以下教程:

  • #245新gem与Bundler – RailsCasts
  • 制作自己的gem – RubyGems Guides

看看珠宝商吧 。 珠宝商为您提供一系列佣金任务,使gem版本和构建非常容易。