我正在开发一个包含三个不同应用程序的项目。他们应该分享一些模型和外部布局。为了避免代码重复,我试图将应用程序布局(project_name/app/views/layouts/application.html.haml
)提取到gem中。
我按照以下步骤操作:
bundle gem common
common/app/views/layouts/application.html.haml
写了Gemspec描述符
# -*- encoding: utf-8 -*-
require File.expand_path('../lib/common/version', __FILE__)
Gem::Specification.new do |gem|
gem.authors = ["Arthur Alkmim"]
gem.email = ["myemail@here"]
gem.description = %q{Common project files}
gem.summary = %q{Common project files, including layout and migrations}
gem.homepage = ""
gem.files = `git ls-files`.split($\)
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
gem.name = "common"
gem.require_paths = ["lib"]
gem.version = Common::VERSION
end
提交更改
gem build common.gemspec
(成功)rake install
(成功)gem 'common'
放在项目Gemfile 但是项目仍然不会加载应用程序布局。我该怎么做才能告诉我的项目必须通过gem加载布局文件?
提前致谢。
答案 0 :(得分:1)
您是否已将宝石添加到Rails Gemfile中以将其包含在您的应用程序中?
您可以使用path选项指定开发中的相对路径。 e.g。
gem 'common', :path => "../path/to/gem"
不要忘记然后运行bundle install
答案 1 :(得分:1)
我有点解决了。我将application.html.haml
更改为common.html.haml
并将相关的布局调用放在ApplicationController中。看起来像Rails不会让我在一个gem中打包application.html布局,但其他布局是可以的。如果有人提出了更好的解决方案(更少的解决方法),请发帖!