Jak uruchomić zadania rake w mojej aplikacji rails
Co chcę zrobić:
W modelu.rb, w after_commit chcę uruchomić zadanie rake ts: reindex
Ts: reindex jest normalnie uruchamiany z rake ' em ts:index
4 answers
Jeśli chcesz, aby ten kod rake był uruchamiany podczas cyklu żądania, powinieneś unikać uruchamiania rake ' a przez system
lub którąkolwiek z rodziny exec (włączając backticki), ponieważ spowoduje to uruchomienie nowego interpretera ruby i przeładowanie środowiska rails za każdym razem, gdy zostanie wywołany.
Zamiast tego możesz wywoływać polecenia Rake bezpośrednio w następujący sposób:-
require 'rake'
class SomeModel <ActiveRecord::Base
def self.run_rake(task_name)
load File.join(RAILS_ROOT, 'lib', 'tasks', 'custom_task.rake')
Rake::Task[task_name].invoke
end
end
Uwaga: w Rails 4+ użyjesz Rails.root
zamiast RAILS_ROOT
.
A następnie po prostu użyj SomeModel.run_rake("ts:reindex")
Kluczowe części tutaj są require rake
i upewnij się, że Załaduj plik zawierający definicje zadań.
Większość informacji uzyskanych z http://railsblogger.blogspot.com/2009/03/in-queue_15.html
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
2017-07-31 17:05:12
require 'rake'
RailsApp::Application.load_tasks
class SomeModel <ActiveRecord::Base
def self.run_rake(task_name)
load File.join(Rails.root, 'lib', 'tasks', 'custom_task.rake')
Rake::Task[task_name].invoke
end
end
A następnie po prostu użyj SomeModel.run_rake("ts:reindex")
.
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-03-05 07:49:27
Miałem ten sam problem i nie mogłem uzyskać zaakceptowanej odpowiedzi na pracę w moim kontrolerze z projektem Rails 4 z powodu błędu wczytania pliku. Ten post dał mi rozwiązanie robocze:
def restart_search
require 'rake'
spec = Gem::Specification.find_by_name 'thinking-sphinx'
load "#{spec.gem_dir}/lib/thinking_sphinx/tasks.rb"
Rake::Task["ts:stop"].execute
Rake::Task["ts:start"].execute
respond_to do |format|
format.js { head :ok }
end
end
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-03-29 22:58:02
Próbowałeś 'rake ts: reindex'?
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
2010-09-09 09:06:36