2012-04-29 9 views
8

Mam aplikację Sinatra, która odpowiada na wywołania api i aplikację Rails, która obsługuje raporty i wszystkie ładne rzeczy, takie jak wykresy i strona internetowa. Oba muszą mieć dostęp do wspólnego zestawu modeli (np. Konta, witryny itp.).Udostępnianie kodu modelu między Sinatra i Railsami

Mój problem polega na tym, w jaki sposób skutecznie udostępniać kod między dwiema aplikacjami? Na przykład, jeśli edytuję model kont w grze Sinatra, nie chcę pamiętać o duplikowaniu tych samych zmian w aplikacji Rails. Wolałbym nie używać montażu Rails Rack, ponieważ dwie aplikacje będą znajdować się w oddzielnych klastrach.

Widziałem propozycje na StackOverflow o:

  • Git Moduły
  • Symlinks (nie będzie działać z systemem Windows, który wykorzystuje mój kolega)
  • Rails plugins (wątpię, to będzie działać z Sinatra)
  • Ruby Gems (myślę, że to jest zbyt przesadą zaledwie danych modelu, ale to tylko moje zdanie)

dwie aplikacje ponownie w różnych repozytoriach. Zasadniczo najpierw rozwijam API, a następnie logikę specyficzną dla konta później w aplikacji Rails (głównie dlatego, że Rails ma dużo więcej bibliotek, które ułatwiają rozwijanie tego rodzaju rzeczy).

Jak rozwiązać ten problem?

+0

Czy aplikacje w tym samym repozytorium lub różnych te? –

+0

Znajdują się one w różnych repozytoriach :) Czy poleciłbyś je wtedy w tym samym repozytorium? – parasquid

+1

Nie, zastanawiałem się, ponieważ opcje zmieniają się nieco w zależności. Osobiście uważam, że albo moduły git, albo prywatny klejnot są najlepszymi opcjami. –

Odpowiedz

4

Wybrałbym klejnot, a raczej coś w rodzaju klejnotu, nie trzeba go publikować, a następnie użyć programu Bundler git dependencies. Robimy to w dużym stopniu na Travis CI i działa świetnie, zwłaszcza z nowymi „lokalnych” zależnościami git w Bundler 1.2: http://gembundler.com/man/bundle-config.1.html#LOCAL-GIT-REPOS

+0

Po to, by wyjaśnić, to znaczy, że będę musiał wyodrębnić podobieństwa między dwiema aplikacjami do klejnotu, prawda? Jeśli tak, to czy znasz repozytorium, które mogę sprawdzić i uczyć się od niego, używając tej techniki? :) – parasquid

+0

Tak, właśnie o to mi chodziło. Alternatywą byłoby albo aplikacja Sinatra i Rails w tym samym projekcie, albo aplikacja Sinatra ładująca aplikację Rails. Sprawdź https://github.com/travis-ci/travis-core na przykład. –

+0

Rozumiem, wielkie dzięki! :) – parasquid