如何将应用程序布局打包到Ruby gem中?

时间:2012-05-24 18:28:31

标签: ruby-on-rails layout view gem gemspecs

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

我按照以下步骤操作:

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

  6. gem build common.gemspec(成功)
  7. rake install(成功)
  8. gem 'common'放在项目Gemfile
  9. 但是项目仍然不会加载应用程序布局。我该怎么做才能告诉我的项目必须通过gem加载布局文件?

    提前致谢。

2 个答案:

答案 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布局,但其他布局是可以的。如果有人提出了更好的解决方案(更少的解决方法),请发帖!