Проблема вызвана тем, что ваша переменная selectedState
помещается перед обновлением выбранного атрибута аккордеона.
Вы можете попробовать разместить код, где вы обновляете выбранный атрибут для аккордеона выше selectedState
Я соглашаюсь с ответом выше, но необходимо включать =>: среда в Вашей задаче или это не загрузит среду направляющих.
например,
namespace :send do
namespace :trial do
namespace :expiry do
desc "Sends out emails to people who's accounts are about to expire"
task :warnings => :environment do
User.trial_about_to_expire.has_not_been_notified_of_trial_expiry.each do |user|
UserMailer.deliver_trial_expiring_warning(user)
user.notified_of_trial_expiry = true
user.save
end
end
end
end
end
Можно загрузить всю среду направляющих в любом рубиновом сценарии путем простого требования environment.rb:
require "#{ENV['RAILS_ROOT']}/config/environment"
Это предполагает, что переменная среды RAILS_ROOT установлена, см. мой комментарий для других способов сделать это.
Это имеет добавленную премию предоставления Вам все хорошие классы и возражает, что Вы имеете в остальной части Вашего кода направляющих.
Для начинания процессов, это кажется, что крон сделает то, что Вы хотите, и я также добавил бы задачу к Вашему capistrano рецепту, который добавит Ваш сценарий к crontab, чтобы периодически получить данные из внешнего источника и обновить Ваш DB. Это может легко быть сделано с cronedit драгоценным камнем.
Подход крона действительно имеет некоторые недостатки, главным образом наверху и управление, поскольку другие более сложные опции видят HowToRunBackgroundJobsInRails от направляющих Wiki.
Я предложил бы создать пользовательские задачи граблей (lib/task/foo.rake). Это предоставляет Вам легкий доступ к большей части функциональности Вашего приложения для направляющих.
namespace :foo do
desc 'do something cool'
def something_cool
test = MyModel.new
test.name = 'test'
test.save
end
end
Затем:
$ rake -T foo
rake foo:something_cool # do something cool
Можно даже выполнить задачи через cronjob.
Можно открыть соединение в сценариях как таковых:
ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:username => "root",
:host => "localhost",
:password => "******",
:database => "******"
)
Я уверен, что существует более изящный способ сделать это, так, чтобы это захватило информацию от Вашего database.yml.
Существует немного шагов к этому, и больше деталей должно было действительно ответить хорошо.
Вы говорите, что Ваш сайт получает данные из других источников? Как часто? Если это полурегулярно, Вы определенно хотите изучить фоновую обработку / обмен сообщениями. Если это часто, Вы действительно не хотите загружать свою среду направляющих каждый раз Ваши выполнения сценария, так как Вы будете платить слишком высокому налогу на запуск каждый раз.
Существует множество опций там, Вы захотите исследовать. При чтении о каждом из них особенно обзоры от людей, которые отправляют о том, почему они сделали выбор, который они сделали, дадут Вам хорошее чувство для того, какие вопросы необходимо задать себя перед совершением выбора. Как большой задание загружает данные? и т.д...
Первое, что пришло на ум это некоторые вещи, которые можно хотеть изучить
Script/Runner & Cron Background/RB Starling Workling MemcacheQ Beanstalk Background Job (Bj) delayed_job (ди-джей) Генератор Демона
Хорошие Joyent описывают использования граблей для выполнения задач направляющих от задания крона - http://wiki.joyent.com/accelerators:kb:rails:cron
Проверьте мой ответ в "Задании крона для направляющих: лучшие практики?".
Это содержит два примера для использования крона для выполнения задач Граблей и методов класса (через script/runner
). В обоих случаях, направляющие загружается, и можно использовать модели.