生成器将模板从gem复制到主机应用程序

时间:2017-02-23 13:17:57

标签: ruby-on-rails ruby rubygems

我正在尝试建立一个宝石。在gem中,我有一些文件需要复制到宿主应用程序。

所以我想构建一个生成器,它将模板从gem复制到主机应用程序到特定目录。

贝娄是我的宝石结构。

enter image description here

我试图从主机应用程序运行bellow命令。

rails g rfile_manager:install

install_generator.rb 的内容如下所示

require 'rails/generators'

module RfileManager
  module Generators
    class InstallGenerator < Rails::Generators::Base
      # copy configuration
      def copy_initializer
        template 'rfile_manager.rb', 'config/initializers/rfile_manager.rb'
        template 'rfile_manager.yml', 'config/rfile_manager.yml'
      end

    end
  end
end

它不起作用,我正在收到关于运行上述命令的信息。

  Could not find "rfile_manager.rb" in any of your source paths. 
  Please invoke RfileManager::Generators::InstallGenerator.source_root(PATH)
  with the PATH containing your templates. Currently you have no source paths.

请帮助我

  • 如何从主机应用程序调用 copy_initializer 方法将模板复制到主机应用程序或建议我是否做错了。

1 个答案:

答案 0 :(得分:0)

guides.rubyonrails.org开始,需要添加类方法 source_root 。此方法指向放置生成器模板的位置。默认情况下,它指向 lib / generators / install / templates

Bellow code修复了这个问题。

require 'rails/generators'

module RfileManager
  module Generators
    class InstallGenerator < Rails::Generators::Base
      source_root File.expand_path("../templates", __FILE__)#This line added

      # copy configuration
      def copy_initializer
        template 'rfile_manager.rb', 'config/initializers/rfile_manager.rb'
        template 'rfile_manager.yml', 'config/rfile_manager.yml'
      end

    end
  end
end