4

私は3つの異なるアプリケーションで構成されるプロジェクトに取り組んでいます。彼らはいくつかのモデルと外側のレイアウトを共有することになっています。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.hamlしてcommon.html.haml、関連するレイアウト呼び出しをApplicationControllerに配置しました。Railsではapplication.htmlレイアウトをgemにパッケージ化できないようですが、他のレイアウトは問題ありません。誰かがより良い解決策を思いついた場合(回避策が少ない)、投稿してください!

于 2012-05-28T16:01:35.113 に答える