2014-01-23 4 views
2

Я никогда раньше этого не делал и не знаю, с чего начать. У меня есть два приложения: одно чтение и другое чтение/запись. Мне сообщили, что я могу использовать одну и ту же базу данных между двумя приложениями и что я должен создать жемчужину своих моделей из приложения для чтения/записи, которое будет использоваться в моем приложении только для чтения.Создайте самоцвет для моделей, которые будут использоваться между двумя приложениями

Это звучит как отличное решение, так как это означает, что мне не придется дублировать мой код между двумя приложениями. С чего начать? я был бы очень благодарен за объяснение и некоторые рекомендации относительно того, что делать здесь, если кто-то может сэкономить время, почти мини, как руководство, если это возможно? или, по крайней мере, где-то посмотреть?

Так, сделав еще некоторое чтение я могу видеть, что вы можете использовать Bundler создать драгоценный камень

bundle gem name-of-my-gem 

и я могу использовать драгоценный камень, как это так, поместив его в каждом приложении

gem "name-of-my-gem", path: "path/to/gem/dir" 

Как мне сказать, какие из моих моделей я хочу поместить в жемчужину?

Любая помощь приветствуется и извинения, если это несколько основных, но я никогда не делал этого раньше

+0

Я не понимаю, почему оболочка модели помещена в драгоценный камень? –

+0

, поэтому мне не нужно создавать все модели в каждом приложении, если это плохая практика, тогда предложите свой метод, однако я бы хотел увидеть это и создать камень с моделями, если не только что-то узнать :) – Richlewis

+0

вы сохранили модель в драгоценном камне, правильно? и вы должны изменить его код? если да, то почему вы сказали о * положить в драгоценный камень *, потому что я думал о данных. –

ответ

2

Как структурировать драгоценный камень в значительной степени зависит от вас, но вот как я бы начал:

name-of-my-gem/ 
.. lib/ 
.... name-of-my-gem.rb 
.... models/ 
...... all_of_your_models 

Ваш gem модели должен иметь файл .rb, который загружает любые модели, хранящиеся в нем. Если этот файл назван в честь драгоценного камня и помещен в каталог lib/ драгоценного камня, он должен быть автоматически загружен связующим. Этот файл может выглядеть следующим образом:

require "models/customer" 
require "models/order" 
# ... 

Вы также могли бы сделать что-то любитель здесь, как захватить список файлов в каталоге моделей и загрузить каждый из них, так что вы не должны добавлять каждую новую модель к этому файл. Вам решать.

Каждые models/ файл будет выглядеть точно так же, как и модель в вашем приложении рельсов:

class Customer < ActiveRecord::Base 
    has_many :orders 
    # ... 
end 

Вы можете копировать любые модели классов, которые вы хотите поделиться из app/models/ в приложении рельсов они в настоящее время проживают в и пастах их в models/ в вашем драгоценном камне. Затем вам просто нужно обновить драгоценный камень в каждом приложении (запустите bundle update name-of-my-gem), и вы сможете взять модель из app/models/, и она все равно должна работать, так как она будет загружена из вашего драгоценного камня.

Одним из недостатков этого подхода является то, что рельсы больше не могут перезагружать модель после внесения изменений. После изменения модели в вашем драгоценном камне вам нужно будет запустить bundle update name-of-my-gem и перезапустить сервер рельсов. Вначале я предлагаю объединить большинство функциональных возможностей модели в одном приложении, чтобы воспользоваться перегрузкой кода rails, и когда его довольно стабильное перемещение в драгоценный камень.

Вы также можете предоставить свои силы перезарядки драгоценных камней, но это довольно сложно, и я никогда этого не делал.

+0

Большое вам спасибо, это имеет смысл, поэтому я буквально беру копию моих моделей и помещаю их в драгоценный камень (будет делать, как только они будут завершены) ... может быть, глупый вопрос, но откуда я могу создать драгоценный камень? вне приложения или внутри моего чтения/записи (app1)? вы очень помогли кстати – Richlewis

+0

Вы создаете драгоценный камень за пределами вашего приложения. По сути ваши модели становятся их собственной библиотекой. Разумеется, я предлагаю сохранить ваш драгоценный камень в хранилище git. Затем вы можете указать «Gemfile» каждого приложения в git repo вместо локального пути к gem: «gem» имя-my-gem », git:« [email protected]: user/repo.git »' –

+1

имеет смысл ... вы просто многое выяснили для меня с созданием драгоценных камней, если бы я мог дать вам больше очков, я бы ... спасибо вам большое – Richlewis

Смежные вопросы