Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 4 在gem中为rails 4构建发电机_Ruby On Rails 4_Gem_Rails Generators - Fatal编程技术网

Ruby on rails 4 在gem中为rails 4构建发电机

Ruby on rails 4 在gem中为rails 4构建发电机,ruby-on-rails-4,gem,rails-generators,Ruby On Rails 4,Gem,Rails Generators,我已经看过并尝试了各种各样的东西来创造一个带有发电机的宝石。也许是我的疲劳让我忘记了什么,也许是因为我缺乏经验。无论是哪种方式,我都试图理解如何构建一个简单生成器的gem,以便在将来的项目中重用代码。是的,我正在构建一些已经存在的东西,但作为一名学习者,我更感兴趣的是理解如何构建一个gem,以便我能够在未来贡献一些更有意义的东西,而不是仅仅使用已经制作好的gem,而不知道到底发生了什么。因此,在没有进一步ado的情况下,我的代码如下所示: tree for simpauth -lib -gen

我已经看过并尝试了各种各样的东西来创造一个带有发电机的宝石。也许是我的疲劳让我忘记了什么,也许是因为我缺乏经验。无论是哪种方式,我都试图理解如何构建一个简单生成器的gem,以便在将来的项目中重用代码。是的,我正在构建一些已经存在的东西,但作为一名学习者,我更感兴趣的是理解如何构建一个gem,以便我能够在未来贡献一些更有意义的东西,而不是仅仅使用已经制作好的gem,而不知道到底发生了什么。因此,在没有进一步ado的情况下,我的代码如下所示:

tree for simpauth
-lib
 -generators
  -simpauth
   -templates
    sessions.rb
   install_generator.rb
 -simpauth
 simpauth.rb
这是我的generators/simpauth/install_generator.rb代码

require 'rails/generators'

module Simpauth
  class InstallGenerator < ::Rails::Generators::Base
    source_root File.expand_path('../templates', __FILE__)
    desc "Creating simple and customizable authentication"

    def add_session
        copy_file "sessions.rb", "app/controllers/sessions_controller.rb"
    end
  end
end
任何帮助都将不胜感激


编辑-此代码在rails应用程序中按预期工作。我只是无法让rails在作为gem安装时识别生成器。

我发现我的问题与gempec文件有关。特别是spec.file分配。我改变了:

spec.file = `git ls-files -z`.split("\x0")


这解决了我的问题。

您的gem依赖于rails::Generators::Base并利用rails生成器。它是建在屋顶上的。它是从rails中抽象出来的,因此它将在不依赖rails的情况下为您提供相同的功能。@jasonyost。我知道我的问题是为什么我的gem在安装后没有被应用程序识别。我发现我的gemspec文件中没有正确设置文件路径,我纠正了这个问题,现在它可以正常工作了。我还没有机会发布我的答案。明天早上就可以了。谢谢你的回复和澄清!你确定那是你唯一做的事吗?我花了几个小时试图解决这个问题,但到目前为止没有结果!
require "simpauth/version"
require 'rails'

module Simpauth
  class Engine < Rails::Engine
  end
end
# coding: utf-8
$:.push File.expand_path('../lib', __FILE__)
require 'simpauth/version'

Gem::Specification.new do |spec|
  spec.name          = "simpauth"
  spec.version       = Simpauth::VERSION
  spec.authors       = ["My Name"]
  spec.email         = ["my_email@example.com"]
  spec.summary       = %q{Simplified authentication}
  spec.description   = %q{}
  spec.homepage      = ""
  spec.license       = "MIT"

  spec.files         = `git ls-files -z`.split("\x0")
  spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
  spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
  spec.require_paths = ["lib"]

  spec.add_development_dependency "bundler", "~> 1.7"
  spec.add_development_dependency "rake", "~> 10.0"
end
spec.file = `git ls-files -z`.split("\x0")
spec.file = Dir["{lib,vendor}/**/*"]