我的rails插件没有将我的文件放在/ app和/ lib方向

时间:2014-07-21 23:27:44

标签: ruby-on-rails ruby-on-rails-4

我创建了一个可以看到here on github的rails引擎。该插件使用其lib目录中的文件,并具有控制器,视图,布局和路由设置。

当我跑步时

rails s

本地on / test / dummy它工作正常。但是,当我创建一个新的应用程序并需要它时,我得到:

  

没有这样的文件或目录@ dir_initialize -   ../../ LIB /资产/ style_guide /标记/碱

该插件不是"转移"我的/ app和/ lib目录中的文件到新的Rails应用程序。如何让插件在rails app中安装文件?

以下是此插件的一些关键文件。我正在计算什么会移动我的控制器也将移动应用程序和lib目录的其余部分。如果您需要查看更多代码,可以查看here on github h

gemspec:

$:.push File.expand_path("../lib", __FILE__)

# Maintain your gem's version:
require "style_guide/version"

# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
  s.name        = "style_guide"
  s.version     = StyleGuide::VERSION
  s.authors     = ["Joshua Schultz"]
  s.email       = ["me@joshuaschultz.com"]
  s.homepage    = "http://quiet-citadel-4316.herokuapp.com/style_guides/index"
  s.summary     = "Rails-based Style Guide Plugin"
  s.description = "Style_Guide is a plugin used to append an automated boilerplate resource to your rails app allowing you to see/show your style guide. This work is largely based off of the idea initiated at https://github.com/bjankord/Style-Guide-Boilerplate"
  s.license     = "MIT"

  s.files         = `git ls-files -z`.split("\x0")
  s.executables   = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
  s.require_path = 'lib'

  s.test_files = Dir["test/**/*"]

  s.add_dependency "rails", "~> 4.1.4"
  s.add_dependency "sqlite3"

end

/lib/style_guide.rb

require "style_guide/engine"

module StyleGuide



end

/lib/style_guide/engine.rb

module StyleGuide
  class Engine < ::Rails::Engine
    initializer 'Style Guide precompile hook', group: :all do |app|
      app.config.assets.precompile += %w( style_guides.css )
      app.config.assets.precompile += %w( style.css )
      app.config.assets.precompile += %w( style_guides.js )
      app.config.assets.precompile += %w( style_guides_plugins.js )
    end

  end
end

/app/controllers/style_guide_controller.rb

class StyleGuideController < ApplicationController
  layout 'style_guide.html.erb'
  include StyleGuideHelper

  def index
    @basefiles = []   
    @patternfiles = []
    Dir.foreach("../../lib/assets/style_guide/markup/base") do |file|
      @basefiles << file if File.extname("#{file}") == ".html"
    end
    Dir.foreach("../../lib/assets/style_guide/markup/patterns") do |file|
      @patternfiles << file if File.extname("#{file}") == ".html"
    end
  end
end

1 个答案:

答案 0 :(得分:0)

问题在于:

Dir.foreach("../../lib/assets/style_guide/markup/base")

在主机应用中,路径"../../lib/assets/style_guide/markup/base"将不正确。您需要使用引擎的根路径:

Dir.foreach(StyleGuide::Engine.instance.root.join("lib/assets/style_guide/markup/base"))

这样做是将文件系统路径返​​回到StyleGuide gem的安装:

StyleGuide::Engine.instance.root

返回一个Pathname对象,您可以调用join并传递一个字符串,将nix中的平台目录定界符/与2连接在一起。

P.S。为什么需要s.add_dependency "sqlite3"