2009-04-04 13 views
6

Zajmuję się tworzeniem aplikacji, która musi wysyłać wiadomości tekstowe, więc mam informacje o operatorze przechowywane w bazie danych. Te informacje są również potrzebne w pliku XML do odczytania kodu po stronie klienta. Aby to się stało, piszę skrypt, który odczytuje informacje przewoźnika z bazy danych i tworzy plik XML w katalogu konfiguracyjnym. Czułem, że ten skrypt najlepiej pasuje do lib/zadań.Jak uzyskać dostęp do mojej bazy danych szyn z zadania w lib/zadania?

Potrzebuję uzyskać dostęp do bazy danych z tego skryptu, ale chcę użyć jakiegoś obiektu, aby uzyskać do niego dostęp. Jeśli użyję

db = Mysql.new("domain", "username", "password", "database") 

będę musiał zachować wiele wersji dla różnych środowisk, ponieważ nie używam MySQL przez cały czas. To byłoby bardzo niedbałe. Jestem pewien, że jest sposób na zrobienie tego. Starałem się tylko dostęp do obiektu ... to jest to, co mam do tej pory:

RAILS_HOME = File.expand_path(File.join(File.dirname(__FILE__),"../..")) 
RAILS_CONFIG = "#{RAILS_HOME}/config" 

f = File.new("#{RAILS_CONFIG}/mls_widget_config.xml", "w") 
carriers = Carrier.find_all 
f.write carriers 
f.close 

Ale Przewoźnik nie jest zdefiniowane, co ma sens. Jak mogę dać temu skryptowi dostęp do obiektu Carrier w DB?

Również jako strona, jeśli ktoś wie, jak łatwo przekonwertować to, co czytałem z DB na odpowiedni XML, który byłby świetny. Zamierzałem szybko napisać coś niestandardowego.

Dziękujemy!

Odpowiedz

8

Można włączyć zadania Rake dostęp do swoich modeli definiując swoje zadanie tak:

task :my_task => :environment do 
    # Task code 
end 

zanotować => :environment, który udziela dostępu. Następnie można zlecić zadanie Rake używać różnych środowiskach w ten sposób:

rake RAILS_ENV=development my_task 
rake RAILS_ENV=production my_task 

Jak dla serializacji XML, można użyć wbudowanego w to_xml metody, takie jak:

Carrier.all.to_xml 

pamiętać, że metody .all jest nowym dodatkiem do Rails i jest aliasem dla .find(:all).

2

Prawie już tam jesteś; Chciałbym tylko polecić wymagające środowisko Rails jako część skryptu, tak jak poniżej:

RAILS_HOME = File.expand_path(File.join(File.dirname(__FILE__),"../..")) 
RAILS_CONFIG = "#{RAILS_HOME}/config" 
require "#{RAILS_CONFIG}/environment" 

Teraz powinieneś mieć dostęp do wszystkich strukturze domeny. Railsy zawierają także domyślną serializację XML za pomocą wywołania metody; spróbuj Carrier.find(:all).to_xml.

2

Zgodnie z konwencją, lib/zadania są zwykle zarezerwowane dla zadań rake - możesz chcieć umieścić swój kod biblioteki we własnym katalogu. lib/messaging, może?

Czy używasz starej wersji Rails? find_all nie działa w najnowszych wersjach: "find (: all)" lub po prostu "all" są w dzisiejszych czasach metodami.

File.new("#{RAILS_ROOT}/mls_widget_config.xml", "w") do |f| 
    Carrier.all.each { |carrier| f.puts carrier.to_xml } 
end 
+0

To nie wyjaśnia, w jaki sposób utworzyć łącze do klasy modelu, ponieważ pyta. – Tilendor

Powiązane problemy