Ładowanie plików rake i uruchamianie zadań z innych plików
Obecnie staram się podzielić moje pliki rake, aby lepiej je zorganizować. W tym celu dodałem folder rake
do katalogu assets
, który zawiera jeden plik rake dla każdej grupy zadań.
Ponieważ pochodzę z PHP, mam tylko bardzo podstawową znajomość Ruby/Rake i nie mogę uruchomić domyślnej akcji w moich przestrzeniach nazw po załadowaniu pliku.
The commented out Rake :: Task ...
- string inside app:init
rzuca błąd w CL na mnie:
rake aborted! uninitialized constant TASK
Oto przestrzeń nazw / Klasa (jeśli jest to właściwe słowo).
task :default => [ 'app:init' ]
namespace :app do
rake_dir = "#{Dir.pwd}/assets/rake/"
rake_files = FileList.new( "#{rake_dir}*" )
desc "Loads rake modules (Default action)"
task :init do
puts "\t Importing rake files for processing"
puts "\t loading..."
rake_files.each() { |rake|
puts "\t #{rake}"
require rake
# @link rubular.com
name = rake.split( rake_dir ).last.gsub( /.rb\z/, '' )
puts "\t #{name}"
#Rake :: Task[ "#{name}:default" ].invoke
}
end
end
Z góry dziękuję.
Edit: przynajmniej mogę być pewien, że plik zostanie załadowany, ponieważ zwykły puts "file loaded"
na początku tych plików odbija się echem. Problem wygląda na to, że tylko polega na tym, że akcja :default
dla przestrzeni nazw w załadowanym pliku rake nie ładuje się.
3 answers
Jeśli twoim celem jest załadowanie zadań rake z zewnętrznego pliku, możesz to zrobić w następujący sposób. Po pierwsze, powiedzmy, że masz zadanie rake w pliku o nazwie <project>/lib/tasks/hello.rake
, który wygląda tak:
desc "Say hello"
task :hello do
puts "Hello World!"
end
Następnie możesz utworzyć prosty Rakefile
w swoim katalogu <project>
, aby załadować go w następujący sposób:
Dir.glob('lib/tasks/*.rake').each { |r| load r}
desc "Say goodbye"
task :goodbye do
puts "See you later!"
end
Oczywiście spowoduje to załadowanie wszystkich plików kończących się rozszerzeniem rake
. Możesz po prostu załadować hello.rake
w następujący sposób:
load './lib/tasks/hello.rake'
desc "Say goodbye"
task :goodbye do
puts "See you later!"
end
Aby zobaczyć wszystkie załadowane zadania użyj rake -T
. Zauważ, że Używałem lib/tasks
, ponieważ jest to standardowe podejście stosowane przez aplikacje Rails. Możesz użyć assets
lub cokolwiek wolisz, chociaż ja wolę lib/tasks
nawet w projektach innych niż Rails. Mam również tendencję do oddzielania plików zadań na podstawie ich przestrzeni nazw.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-27 22:35:37
Możesz umieścić swoje zadania w folderze rakelib/
, który domyślnie ładuje się rake
lub dodać określony folder w swoim Rakefile
Poprzez:
Rake.add_rakelib 'lib/tasks'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-06 09:05:58
Zawsze możesz użyć Rake.add_rakelib 'tasks'
, jak powiedział @splattael. Jedno musisz wiedzieć, pliki w katalogu 'zadania' muszą mieć rozszerzenie '.grabie "zamiast".rb', inaczej rake nie załaduje go za Ciebie.
Przykładowy plik:
- https://github.com/nanoc/nanoc/blob/master/Rakefile
- https://github.com/nanoc/nanoc/tree/master/tasks
Po wykonaniu wszystkich powyższych czynności użyj rake -T
, aby sprawdzić, czy rake załadował Twoje zadania z powodzeniem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-04 10:15:36