Tag: 插件

如何将大型gem转换为独立的rails应用程序

我正在建立一个社交网络并且一直在使用gem community_engine但是在实现我的应用程序所需的大量自定义时遇到了麻烦。 我认为这将使我更容易覆盖和添加方法,并帮助我更好地理解和学习代码,因为我将能够实际看到所有这些在行动中。 到目前为止,在我的尝试中,我下载了源代码,添加了缺少的默认bin目录和配置文件,以及所有gem依赖项。 我还需要做些什么来让应用程序运行? 我意识到可能还有很多,而且可能不容易解释,但至少有没有任何类型的文档可以帮助我理解如何将gem转换为Rails应用程序? inheritance了community_engine回购: https : //github.com/bborn/communityengine 因为这个想法可能引起一些批评,我会补充说我最初构建的应用程序没有任何巨大的插件接受设计但是我没时间完成这个。 我尝试过的更多东西: 将文件移动到一个新的rails应用程序,让服务器运行,但遇到了许多看似随机的错误,修复了一些但更多似乎弹出我无法弄清楚: 我还看了http://guides.rubyonrails.org/plugins.html,但这个gem似乎超越了这一点。

管理冲突版本的ruby gems

我正在构建一个加载用户提供的ruby代码的框架。 它基本上是一个插件机制。 我希望用户提供ruby代码,以便能够获得自己的gem。 我打算让“插件”包中包含一个包含gem的供应商目录。 如何加载插件所需的gem而不会让它们与我的框架的gem发生冲突? 例如,如果我的框架使用treetop版本1.3.0,并且插件使用treetop 1.4.2我希望每个都使用他们指定的版本。 同样,有没有办法防止插件相互冲突? 我看过gem_plugin,_why的沙箱和其他一些工具。 但我没有看到任何专门处理这种情况的库 – 我认为之前已经完成了。 我还看了Bundler的内部,看看它如何管理gem版本。 如果需要,我准备做一些非常复杂的事情。 但我仍然不确定如何去做。 我对如何实现这一点也有很大的自由。 所以,如果你认为我正在咆哮错误的树,请说出来。 谢谢你的建议。 侧面注意:在我写这篇文章时,我发现需要类似于Java servlet容器中的类加载器。 WAR文件可以包含jar文件,Web应用程序的类加载器将优先于全局类路径上的jar。 在ruby中是否有任何方法来分割ruby“classpath”(即load_path,require等)?

如何在Ruby类定义的末尾设置一个钩子来运行代码?

我正在构建一个插件,允许开发人员在类定义中使用简单声明向类添加各种function(遵循正常的acts_as模式)。 例如,使用插件的代码可能看起来像 class YourClass consumes_my_plugin option1: :value1, specific_method_to_use: :your_method end 我的问题出现了,因为我想错误地检查为:specific_method_to_use参数提供的值是否作为方法存在,但代码通常是组织和加载的方式,该方法尚不存在。 我的插件中的代码暂时看起来像这样: module MyPlugin extend ActiveSupport::Concern module ClassMethods def consumes_my_plugin(options = {}) raise ArgumentError.new(“#{options[:specific_method_to_use]} is not defined”) if options[:specific_method_to_use].present? && !self.respond_to?(options[:specific_method_to_use]) end end end 这可行: class YourClass def your_method; true; end consumes_my_plugin option1: :value1, specific_method_to_use: :your_method end 但这是大多数人编写代码的方式,它不会: class YourClass consumes_my_plugin option1: :value1, specific_method_to_use: :your_method […]