4

我正在开发一个包含三个不同应用程序的项目。他们应该共享一些模型和外部布局。为避免代码重复,我尝试将应用程序布局 ( project_name/app/views/layouts/application.html.haml) 提取到 gem 中。

我按照以下步骤操作:

  1. 创建基础 gem 结构bundle gem common
  2. 将布局文件放在里面common/app/views/layouts/application.html.haml
  3. 编写了 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
    
  4. 提交更改

  5. gem build common.gemspec(成功的)
  6. rake install(成功的)
  7. 放入gem 'common'项目 Gemfile

但是该项目仍然不会加载应用程序布局。我应该怎么做才能告诉我的项目必须通过 gem 加载布局文件?

提前致谢。

4

2 回答 2

1

您是否已将 gem 添加到 Rails Gemfile 以将其包含在您的应用程序中?

您可以使用 path 选项来指定开发中的相对路径。例如

gem 'common', :path => "../path/to/gem"

不要忘记然后运行bundle install

于 2012-05-28T01:05:27.693 回答
1

我解决了它。我更改application.html.hamlcommon.html.haml并将相关的布局调用放在 ApplicationController 中。似乎 Rails 不允许我将 application.html 布局打包在 gem 中,但其他布局还可以。如果有人提出更好的解决方案(更少的解决方法),请发布!

于 2012-05-28T16:01:35.113 回答