Ruby on rails 3 创建Rails3引擎/插件/Gem需要指导吗

Ruby on rails 3 创建Rails3引擎/插件/Gem需要指导吗,ruby-on-rails-3,rubygems,Ruby On Rails 3,Rubygems,我需要一些帮助,找出创建Rails3引擎(或插件和/或gem)的最佳方法 为这个问题的长度道歉……这是第一部分: 我的公司使用电子邮件服务提供商发送我们所有的出境客户电子邮件。他们创建了一个SOAPWeb服务,我将其合并到一个Rails3示例应用程序中。首先创建一个应用程序的目的是,这样我就可以把代码变成一块宝石 以下是一些背景:SOAP服务总共有23个操作,在创建示例应用程序时,我将类似的操作分组在一起。其中一些操作涉及通过SOAP-WS上传/下载邮件列表和HTML内容,因此,有一个MySQL

我需要一些帮助,找出创建Rails3引擎(或插件和/或gem)的最佳方法

为这个问题的长度道歉……这是第一部分:

我的公司使用电子邮件服务提供商发送我们所有的出境客户电子邮件。他们创建了一个SOAPWeb服务,我将其合并到一个Rails3示例应用程序中。首先创建一个应用程序的目的是,这样我就可以把代码变成一块宝石

以下是一些背景:SOAP服务总共有23个操作,在创建示例应用程序时,我将类似的操作分组在一起。其中一些操作涉及通过SOAP-WS上传/下载邮件列表和HTML内容,因此,有一个MySQL数据库,其中有一些表将HTML内容和列表存储为一种“暂存区”

总之,我有5个模型来包含SOAP操作(它们不是从ActiveRecord::Base继承的)和3个与MySQL数据库交互的模型

我还为每个模型提供了一个相应的控制器,并为每个SOAP操作提供了一个视图,用于在实现操作时帮助我测试这些操作

所以…我不知道接下来该怎么办。我的代码需要大量的干涸。例如,WS要求在每个请求的信封体中发送用户身份验证信息。因此,这意味着模型中的每个方法都有相同的身份验证信息硬编码到其中,这是非常重复的;显然,我希望它更干净。我现在还回顾了代码,发现请求本身是重复的,可能会被合并

所有这些我想我自己都能弄明白,但有一件事情似乎很明显,但我无法弄明白。我如何创建可以在所有模型中使用的方法(具体考虑等式中的用户身份验证部分)

以下是第2部分:

我从一开始就打算提取我的代码并将其打包成一个gem,以防我的ESP的任何其他客户端都可以使用它(另外,我将在几个不同的应用程序中使用它)。然而,我希望它是非常可配置的。只需将gem添加到gem文件,就应该有一个默认的最小配置(即仅包装SOAP操作的模型)。不过,我也希望有一些工具(比如生成器或Rake任务)可以让用户开始使用。我想到的是创建迁移文件、模型、控制器或视图的选项(如果需要的话,也可以是整个九码)

所以,我一直想知道我是应该追求插件还是引擎路线。我读过乔丹·韦斯特关于创造引擎的系列文章,我真的很喜欢这个想法,但我不确定这对我来说是否是正确的路线

所以,如果你已经读了这么多,而我没有把你搞糊涂,我可以给你一些指导:)


谢谢

让我们分部分回答你的问题

第一部分

Ruby的灵活性意味着您可以非常轻松地跨所有模型共享代码。他们是否在扩展任何种类的类?如果是,只需将方法添加到父对象,如下所示:

class SOAPModel
  def request(action, params)
    # Request code goes in here
  end
end
然后,只需在各自的模型中调用
request
。或者,您可以使用
SOAPModel.request
静态访问此方法。这真的取决于你。否则,如果(出于某些奇怪的原因)您不能触摸父对象,则可以动态定义方法:

[User, Post, Message, Comment, File].each do |model|
  model.send :define_method, :request, proc { |action, params|
    # Request code goes in here
  }
end
它是Ruby,所以有很多种方法

第二部分

Gems在处理您的问题时非常灵活;Rails和Rake都非常智能,可以查看您的gem(只要它在您的环境文件和Gemfile中)。创建一个
generators
目录和一个
/name/name\u generator.rb
,其中name是您的生成器的名称。刚刚运行的
railsgname
,您就到了。Rake(
任务
)也是如此


我希望这有帮助

多谢各位!这确实很有帮助。