我创建了一个可以看到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
答案 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"
?