作为一名Rails开发人员,我觉得问这个问题有点愚蠢,但希望我能学到一些新东西,有人能帮我摆脱痛苦!在我的rails应用程序中,我总是使用(其他人)gem,我也使用来自社区或我自己的插件。
我理解使用gem而不是插件的好处,因为它们是可版本的,分段的,系统范围的,更容易管理和共享等等,但我真的不知道如何为我的rails应用程序制作gem!?
你总是从一个插件开始,然后把它转换成一个gem吗,我见过这样的话‘打包成Gem’。此外,我正在考虑构建的gem在普通的ruby程序中也不是很好,它只对rails应用程序有用。我甚至不确定它的语义是否有意义,'RubyGem‘只能在rails应用程序中工作!?
我想创建一个gem (如果这是我应该使用的?)为我的rails应用程序提供了一个独立的功能。它将需要添加数据库迁移,新的路由,并提供控制器和视图或有用的视图助手。我知道我可以通过一个插件来实现这一点,但我只是想知道如何/为什么要作为一个“Ruby Gem”来实现它?
发布于 2010-01-15 22:22:31
为了避免过度工程的风险,我通常直接从应用程序中需要的功能开始。然后,当我需要在另一个项目中使用相同的功能时,我会检查是否值得将其提取到一个插件中,甚至是一个提供API的单独应用程序中。
插件和Gem通常是可互换的。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应用程序将直接忽略它。
发布于 2010-01-15 22:22:37
如果你想为Rails制作一个插件,https://peepcode.com/products/rails-2-plugin-patterns给了你一个很好的开始。之后,把这个插件做成一个宝石。
要制作一个gem,这个资源http://railscasts.com/episodes/183-gemcutter-jeweler会很有帮助。
发布于 2010-01-15 22:23:17
看看Jeweler吧。珠宝商提供了一组rake任务,使gem的版本控制和构建变得非常容易。
https://stackoverflow.com/questions/2072059
复制相似问题