【问题标题】:Building a ruby gem for Rails applications为 Rails 应用程序构建一个 ruby​​ gem
【发布时间】:2011-01-05 12:51:49
【问题描述】:

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

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

您是否总是从插件开始并将其转换为 gem,我见过“将其打包为 Gem”这句话。此外,我正在考虑构建的 gem 在普通的 ruby​​ 程序中也没什么用,它只对 rails 应用程序有用。我什至不确定它的语义是否有意义,“RubyGem”只能在 Rails 应用程序中使用!?

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

【问题讨论】:

    标签: ruby-on-rails rubygems ruby-on-rails-plugins


    【解决方案1】:

    从 2013 年开始,您将希望使用 Bundler 和以下教程:

    【讨论】:

      【解决方案2】:

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

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

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

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

      如果你想达到同样的效果,请确保遵循标准的 Gem 布局并提供 Rails 所需的 init.rb 初始化脚本。 此外,当插件作为标准 Rails 插件安装时,您可能希望创建一个 install.rbuninstall.rb 文件以包含安装后和卸载后挂钩。

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

      【讨论】:

      • 你能修复你的 tabs_on_rails 插件的 url 吗?
      • @SimoneCarletti -“Rails 应用程序实际上无法加载定义到作为 Gem 打包的插件中的 rake 任务” - 我认为这仍然不是真的..
      【解决方案3】:

      看看Jeweler。 Jeweler 为您提供了一组 rake 任务,使宝石版本控制和构建变得非常容易。

      【讨论】:

        【解决方案4】:

        如果你想为 Rails 做一个插件,https://peepcode.com/products/rails-2-plugin-patterns 给你一个好的开始。之后,将插件制作成 gem。

        要制作宝石,此资源http://railscasts.com/episodes/183-gemcutter-jeweler 将很有帮助。

        【讨论】:

        • 感谢您的评论,当我第一次编写一个非常有用的插件时,我已经阅读了该插件书。 “将插件变成宝石”似乎是答案。
        猜你喜欢
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-15
        • 2014-01-07
        • 1970-01-01
        相关资源
        最近更新 更多