Ответ 1
Вы можете взглянуть на:
В настоящее время я создаю 2 API, используя Ruby on Rails. Один, если для чтения (поиск объектов, запросов), а другой - для собственно записи на него, с участием сложного процесса с очередями и другого API. Оба приложения требуют в них одинаковые модели и логику.
Мой вопрос в том, какая наиболее распространенная передовая практика или подход для обмена спецификациями моделей (отношениями, областями, методами) между двумя рельсовыми приложениями?
Спасибо!
Вы можете взглянуть на:
То, как я это сделаю, - это "Mountable Engine". Ознакомьтесь с отличным Railscast by Ryan Bates для стартеров и машинный раздел на api.rubyonrails.org для получения более подробной информации.
С наилучшими пожеланиями, Манди
Если вы просто хотите поделиться моделями, вы можете добавить другую папку моделей проектов в свои пути автозагрузки:
rails new test1
rails new test2
cd test1
rails g model User
cd ../test2/
# ACTION REQUIRED: edit config/application.rb adding this line
# inside the class Application < Rails::Application block:
#
# config.autoload_paths += %W(#{config.root}/../test1/app/models)
#
mkdir db/migrate
cp ../test1/db/migrate/*_create_users.rb db/
mv db/*_create_users.rb db/migrate/
rake db:migrate
rails r 'puts User.inspect'
#=> User(id: integer, created_at: datetime, updated_at: datetime)
Вы также можете установить все, чтобы две папки app/models
были приватными, используя третью общую папку, добавив это в проекты:
# config.autoload_paths += %W(/path/to/a/shared/folder)
Эта папка может быть даже не одной и той же папкой для каждого проекта, поэтому она может быть, например, для подмодуля git (если вы используете GIT, я рекомендую это решение).
Другим вариантом может быть указание app/models
в общую папку с мягкой ссылкой
Мой трюк для этого заключается в том, чтобы на самом деле не использовать трюки Rails. Я использую трюки "git" и извлекаю код из третьего репликации с общим кодом. Я помещал это в оба приложения в качестве движка и как внешнюю ссылку git.
Это немного больше работы, но как только вы сделали это один раз в одном приложении, легко использовать это как шаблон для следующего.
Вы можете попробовать подмодуль git для этого задания.