Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何创建特定于Rails的Rubygem?_Ruby On Rails_Ruby_Rubygems_Html Safe - Fatal编程技术网

Ruby on rails 如何创建特定于Rails的Rubygem?

Ruby on rails 如何创建特定于Rails的Rubygem?,ruby-on-rails,ruby,rubygems,html-safe,Ruby On Rails,Ruby,Rubygems,Html Safe,我们正在建立一个聊天服务,人们可以从他们的代码中使用它 在我们正在构建的工具中,我们制作了一个RubyGem,允许人们快速地将聊天窗口添加到RubyWeb应用程序中 不过,我们希望创建一个特定于Rails的包装器,因为目前用户必须手动调用.html\u safe 如何在Ruby gem中使用这些特定于Rails的特性?我听说这可能被称为“Railsties”,但我还没有找到任何关于这些的全面文档,以及如何使用它们 具体而言,我们希望: 对某些字符串输出调用html\u safe,这样用户就不必

我们正在建立一个聊天服务,人们可以从他们的代码中使用它

在我们正在构建的工具中,我们制作了一个RubyGem,允许人们快速地将聊天窗口添加到RubyWeb应用程序中

不过,我们希望创建一个特定于Rails的包装器,因为目前用户必须手动调用
.html\u safe

如何在Ruby gem中使用这些特定于Rails的特性?我听说这可能被称为“Railsties”,但我还没有找到任何关于这些的全面文档,以及如何使用它们

具体而言,我们希望:

  • 对某些字符串输出调用
    html\u safe
    ,这样用户就不必手动执行此操作
  • 将一些配置设置放入
    config/initializers/some_name.rb中的文件中,而不必内联指定这些设置
  • 可能创建一个生成器,用户可以运行该生成器自动填充此初始值设定项
我们如何使用这些功能?我们是否可以在gem中包含其他gem依赖项来访问这些功能

发动机可以被认为是提供以下功能的微型应用 其主机应用程序的功能。Rails应用程序是 实际上只是一个“增压”引擎,带有Rails::应用程序 类继承了Rails::Engine的许多行为。

引擎可以包含模型、控制器、路由、生成器、中间件以及可以装载到主机应用程序中的任意代码。发动机通常包装成宝石

例如,Desive是一个提供授权的rails引擎

Rails具有用于创建引擎的生成器命令:

rails plugin new chatty --mountable
对于这个例子,让我们称之为健谈

由于引擎安装在Rails应用程序中,因此您可以完全访问Rails堆栈(例如
.html\u safe
)。这也意味着您可以通过将发动机安装在虚拟应用程序中来测试发动机

如果您已将应用程序打包为gem,则只需将其添加到gem文件中,即可将其装载到主机应用程序中

要使您的引擎可配置,您可以按照以下步骤操作:


您现在可以运行
rails g chatty:install
,它将在主机应用程序中创建文件。

也许可以看看Railties实际上与您想要的有很大不同。Railties是组成rails框架堆栈的低级组件。例如,ActiveRecord和Mongoid都是railties。您可以在
/config/application.rb
中看到railties列表。因为您描述的功能(聊天服务器)是应用程序的一部分,而不是框架本身,所以它不是railtie。请确保您也阅读了。
# lib/chatty.rb
module Chatty
  class << self
    attr_accessor :configuration
  end

  def self.configure
    self.configuration ||= Configuration.new
    yield(configuration)
  end

  class Configuration
    attr_accessor :foo

    def initialize
      @foo = 'some_value'
    end
  end
end
# lib/generators/chatty/install/install_generator.rb
module Chatty
  class InstallGenerator < Rails::Generators::Base
    source_root File.expand_path('templates', __dir__)

    desc "Creates a Chatty initializer."

    def copy_initializer
      template 'chatty.rb', 'config/initializers/chatty.rb'
    end
  end
end
# /lib/generators/chatty/install/templates/chatty.rb
Chatty.configure do |config|
  config.foo = "bar"
end