2012-08-09 5 views
18

私はこのトピックについて多くのことを読んできましたが、何も私のニーズをカバーするものはありません。もし私がルビーとレールに新しいものと、stackoverflowに新しいものについて、私が何かを繰り返すか不明瞭にしてしまったら、すみません。レールモデルを含む宝石を作成する

私はそこに多くのインフラストラクチャを持つ既存のレールアプリケーションを持っています。私はモデルのいくつかを取ってネームスペースにネストし、それを他のレールアプリケーションで使うためにルビーの宝石に入れたいと思っています。私が理解しているように、レール用のロードパスには問題があります。これはコンベンションであり、別のエンジンを定義する際に問題があり、2つあり、クラッシュします。

私は多くの運がなければこれを行う方法を学ぶためのガイドやチュートリアルを探していましたが、誰かが私にそれが素晴らしいと指摘することができれば何かがあります。

エンジンで宝石を作る試みは、衝突やレールの不足で失敗します。

私はレール3.2.3とルビ1.9.3を実行しています。このマニュアルに

+1

あなたが記述している問題は、通常、コードを新しいRailsエンジンにリファクタリングすることによって解決されます。どのようにエンジンを作成しようとしていますか、正確にどのようなエラーが表示されていますか? – PinnyM

+1

ガイドとして、[this](http://edgeguides.rubyonrails.org/engines.html)または[this](http://stackoverflow.com/questions/4993166/making-a-)を見てきましたか? custom-plugin-gem-engine-for-rails-3-app)? – PinnyM

+0

私は何をしようとしているのか詳しく説明しよう: 投稿、コメント、タグ付きの基本的なRailsチュートリアル(ブログ)のサンプルアプリケーションを作った。 今、私はタグをつけて、どのRailsアプリケーションでもどのモデルにもタグを追加できるような宝石にしたいと言っています。 私がやったことは、すべてのタグ(モデル、パーシャル、マイグレーション)を含んでいる宝石を作ることでした。そして、私はそれを必要とするとき、 "tag_model_gem" NameErrorを必要と001>:文字 – Shrewd

答えて

1

スタート - http://guides.rubyonrails.org/engines.html

はあなたのエンジンにすべてのあなたが必要とする、モデル、コントローラe.t.cを置くよりもCOMAND

$ rails plugin new "EngineName" --mountable 

でエンジンを作成します。そこから宝石を作りなさい。 この宝石をMasterAppに追加してください。すべてのモデルは、EngineName名前空間で使用できます。

+1

問題はマウント可能なプラグインの作り方だけではなく、プラグインに追加されたものがバックグラウンドで静かに動作することです。 – Shrewd

17

はい、モデルを含む宝石を作成し、それらを複数のRailsアプリケーションに含めることができます。これはそれを行うための一つの方法である:

  • は宝石を作成します。​​

  • を作成したり、モデルがdemo_gemに移動します。私はそれらをのlib/のような宝石のフォルダに入れるのが好きです。例えば、demo_gem/lib/app/models/student.rbのようなフォルダです。

    module DemoGem 
        class Student < ActiveRecord::Base 
        end 
    end 
    
  • require "demo_gem/version" 
    require "demo_gem/app/models/student.rb" 
    module DemoGem 
        # Your code goes here... 
    end 
    
  • demo_gem.rb/libにdemo_gem /内のすべてのモデルが(私はあなたのコードではないことを仮定しているあなたのRailsアプリケーションGemfileで宝石を含める必要オープンソースであり、あなたは宝石を公開する予定はありません):

    gem 'demo_gem', path: '../demo_gem' 
    

DemoGem::Studentを使用するだけで、複数のレールアプリケーションのどこでもこれらのモデルを使用できます。

ここでは、単一のデータベースを使用しており、そのテーブルが存在するものとします。ただし、宝石自体にマイグレーションを作成し、Rails generatorsを使ってアプリにコピーすることができます。

関連する問題