2012-05-24 65 views
4

我正在研究一個包含三個不同應用程序的項目。他們應該分享一些模型和外部佈局。爲了避免代碼重複,我試圖將應用程序佈局(project_name/app/views/layouts/application.html.haml)提取到一個gem中。如何將應用程序佈局打包到Ruby gem中?

我按照這些步驟:

  1. 裏面創建common/app/views/layouts/application.html.haml
  2. bundle gem common

  3. 地方佈局文件基本寶石結構寫的Gemspec描述

    # -*- encoding: utf-8 -*- 
    require File.expand_path('../lib/common/version', __FILE__) 
    
    Gem::Specification.new do |gem| 
        gem.authors  = ["Arthur Alkmim"] 
        gem.email   = ["[email protected]"] 
        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加載佈局文件?

在此先感謝。

+0

如何使用git子模塊或svn外部?如果你走寶石路線,你將不得不建立/安裝每當有變化。 – kreek

+0

@KreeK子模塊和外部設備是一種痛苦。根據我的經驗處理寶石更容易 - 只需運行「捆綁安裝」即可。特別是Git子模塊非常煩人。 –

回答

1

我有點解決它。我將application.html.haml更改爲common.html.haml,並將相關的佈局調用放置在ApplicationController中。看起來像Rails不會讓我將application.html佈局封裝在gem中,但是其他佈局也可以。如果有人提出了一個更好的解決方案(更少的解決方法 - ish),請發佈!

+0

我會爲你的寶石提供一個發電機。用你的版本替換'application.html.haml'。就像'rails g common:install'一樣' – Kyle

+0

我認爲這比裝飾控制器更麻煩。每次更新寶石時,我都必須重新運行生成器,並且通過代碼複製再次受到困擾。 –

+0

出於好奇 - 您是否在使用該gem的應用程序中刪除了'app/views/layouts/application.html.haml'? – max

1

您是否已將您的Gem添加到您的Rails Gemfile中以將其包含在您的應用程序中?

您可以使用path選項在開發中指定相對路徑。例如

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

不要忘了,然後運行bundle install

相關問題