作为一名Rails开发人员,我觉得有点愚蠢地提出这个问题,但希望我能学到新的东西,有人可以让我摆脱苦难!在我的rails应用程序中,我一直使用(其他人)宝石,我也使用来自社区或我自己的插件。
我理解使用宝石而不是插件的好处,因为它们是版本,分段,系统范围,更易于管理和共享等等,但我真的不知道如何为我的rails应用程序制作宝石! ?
你总是从一个插件开始并将其转换为宝石,我已经看到了“将它打包为宝石”这几个字。另外我正在考虑构建的宝石在普通的ruby程序中并不好用,它只对rails应用程序有用。我甚至不确定它的语义是否有意义,'RubyGem'只适用于rails应用程序!?
我想为我的rails应用创建一个gem(如果这是我应该使用的?)。它需要添加数据库迁移,新路由并提供控制器和视图或有用的视图助手。我知道我可以通过一个插件实现这个目的,但是我想知道如何/为什么要把它作为'Ruby Gem'来做?
答案 0 :(得分:7)
为了避免过度工程的风险,我通常从我需要的功能开始直接进入应用程序。然后,一旦我需要将相同的功能用于另一个项目,我就会检查是否值得将其提取到插件中,甚至是提供API的单独应用程序。
插件和宝石通常可以互换。 Gems在可重用性和可维护性方面提供了几个显着的优势。 另一方面,有一些具体的已知问题。例如,Rails应用程序实际上无法加载定义到打包为Gem的插件中的rake任务。
几乎每个Rails插件都可以打包为Gem。 例如,拿我的tabs_on_rails插件。
您可以将其安装为Gem,指定对environment.rb的依赖性。或者您可以按预期使用script/plugin install
命令。
如果要获得相同的结果,请确保遵循标准Gem布局并提供Rails所需的init.rb
初始化脚本。
此外,当插件作为标准Rails插件安装时,您可能需要创建install.rb
和uninstall.rb
文件以包含安装后和安装后挂钩。
最后但并非最不重要的一点是,如果将插件打包为Gem,则可以在非Rails项目中重用它,并使用init.rb
文件提供特定于Rails的初始化。非Rails应用程序将忽略它。
答案 1 :(得分:3)
如果你想为Rails创建一个插件,https://peepcode.com/products/rails-2-plugin-patterns会给你一个良好的开端。之后,将插件变为gem。
要创建一个gem,此资源http://railscasts.com/episodes/183-gemcutter-jeweler将会有所帮助。
答案 2 :(得分:3)
截至2013年,您将需要使用Bundler和以下教程:
答案 3 :(得分:2)
看看Jeweler。珠宝商为您提供一系列佣金任务,使宝石版本和构建非常容易。