2012-06-19 16 views
23

Przy mojej dużej aplikacji, ładowanie konsoli Railsowej zajmuje trochę czasu. Czy istnieje łatwiejszy sposób na pojedyncze polecenia?Polecenia Run Rails poza konsolą

Chciałbym również móc automatyzować rzeczy, a echo "query" | rails console nie jest świetnym sposobem na robienie rzeczy.

Myśli?

EDYCJA: A co z długotrwałym procesem, w którym mogę pingować zapytania, gdy tylko zajdzie taka potrzeba?

+0

Jestem ciekawy, jaki jest twój przypadek użycia, ponieważ wydaje się, że prawdopodobnie istnieje lepsze rozwiązanie. –

+0

Używam Geckoboard do pobierania statystyk z uruchomionej aplikacji przy użyciu kanału JSON, który konfiguruję za pomocą tych zapytań ... czy robię to zupełnie źle? – tekknolagi

+0

Prawdopodobnie bardziej sensownym byłoby po prostu zbudowanie tego kodu bezpośrednio w aplikacji i pobranie danych przez HTTP. Jeśli są to poufne informacje, wymagają pewnego rodzaju autoryzacji, np. klucz API z żądaniem. –

Odpowiedz

39

Istnieją dwa główne sposoby wykonywania poleceń poza konsolą:

    zadanie
  1. Rake, która zależy od: środowisko
  2. szyn jezdnych (wcześniej skrypt/biegacz), np:

    $ szyn jezdnych "query"

Oba są dość dobrze udokumentowane na prowadnice: http://guides.rubyonrails.org/command_line.html

btw: obie te metody będą nadal działać w tym samym czasie co konsola, ale będą przydatne w przypadku zadań nieinteraktywnych.

18

Wystarczy rura jest w:

echo 'puts Article.count' | bundle exec rails c 

Powinno być teraz o wiele szybciej niż wtedy, gdy sprawa została pierwotnie zapytał powodu Spring. Nie jest to natychmiastowe, ale wciąż o wiele szybsze niż obracanie całej aplikacji. Służy do szybkiego ruchu, powinien działać w ramach drugiego (zakładając swój wymagany polecenia jest szybki):

echo 'puts Article.count' | spring rails c 

Jeśli naprawdę chcesz jednego procesu długo działa, można łatwo zrobić to poprzez stworzenie kontrolera akcja, która po prostu uruchamia to, co POST, a następnie wysyła polecenia do niego za pomocą curl za aliasem. Działanie byłoby oczywiście całkowicie niepewne i powinno być potrójnie chronione przed uruchomieniem w pobliżu produkcji, ale byłoby to łatwe do skonfigurowania.

Powiązane problemy