Ruby on rails 如何将应用程序布局打包到Ruby gem中?
我正在做一个包含三个不同应用程序的项目。他们应该共享一些模型和外部布局。为了避免代码重复,我尝试将应用程序布局(Ruby on rails 如何将应用程序布局打包到Ruby gem中?,ruby-on-rails,layout,view,gem,gemspecs,Ruby On Rails,Layout,View,Gem,Gemspecs,我正在做一个包含三个不同应用程序的项目。他们应该共享一些模型和外部布局。为了避免代码重复,我尝试将应用程序布局(project\u name/app/views/layouts/application.html.haml)提取到gem中 我遵循以下步骤: 使用bundle gem common 将布局文件放在common/app/views/layouts/application.html.haml 编写gempec描述符 # -*- encoding: utf-8 -*- require Fi
project\u name/app/views/layouts/application.html.haml
)提取到gem中
我遵循以下步骤:
bundle gem common
common/app/views/layouts/application.html.haml
# -*- 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安装
(成功)gem“common”
放在项目文件中提前感谢。您是否已将gem添加到Rails gem文件中以将其包含在应用程序中 您可以使用路径选项指定开发中的相对路径。e、 g
gem 'common', :path => "../path/to/gem"
别忘了运行
bundle install
我解决了这个问题。我将application.html.haml
更改为common.html.haml
,并在ApplicationController中放置了相关的布局调用。似乎Rails不允许我将application.html布局打包到gem中,但其他布局也可以。如果有人提出了更好的解决方案(少一些变通方法),请发布 使用git子模块或svn外部如何?如果您选择gem路线,那么无论何时发生更改,您都必须构建/安装。@KreeK子模块和外部模块有点麻烦。根据我的经验,处理gems更容易——只需运行bundle install
就可以了。Git子模块尤其令人讨厌。我会为你的gem提供一个生成器。让它用您的版本替换application.html.haml
。类似于railsgcommon:install
的东西,我认为这比简单地装饰控制器更麻烦。每次更新gem时,我都必须重新运行生成器,并且再次受到代码重复的困扰。出于好奇,您是否删除了使用gem的应用程序中的app/views/layouts/application.html.haml
?