Могу ли я изменить config.cache_classes программно в Rails 3? - PullRequest
5 голосов
/ 08 августа 2011

У меня есть несколько клиентских тестов iPhone, которые запускаются на моем сервере rails.Весь набор будет работать на порядок быстрее, если я включу кэширование классов в конфигурации Rails.С другой стороны, это замедляет разработку, когда я на самом деле не запускаю тесты.

Я хочу, чтобы набор тестов запускал действие в начале, чтобы включить кэширование классов, и другое действие в конце, чтобы снова отключить кэширование классов.

Возможно ли это вообще?Если да, то как?

Ответы [ 2 ]

1 голос
/ 08 августа 2011

Не без серьезного взлома.Rails делает довольно много проблем, чтобы убедиться, что ваши файлы перезагружаются при каждом запросе (когда cache_classes=false).Значение переменной конфигурации cache_classes используется инициализаторами в нескольких местах, не в последнюю очередь из которых:

  • , использующих require для загрузки файлов ruby, когда cache_classes равен true (то есть онибольше не перезагружается)
  • настройка обратных вызовов диспетчера для повторной загрузки приложения при каждом запросе, когда cache_classes равно false

У вас есть доступ к значению cache_classesпеременная, и вы можете даже изменить ее, если хотите:

Rails.configuration.cache_classes = true

Но это не повлияет на работающий экземпляр rails, поскольку инициализаторы, в которых это значение используется, запускаются только один раз при запуске приложения rails.

Что это означает, если вы не готовы потратить некоторое серьезное время и усилия на взлом, вы не сможете избежать перезагрузки сервера.Итак, вам нужно посмотреть, как управлять процессом перезапуска через ваш набор тестов.

Например, вы можете попробовать перезапустить rails изнутри rails .Это позволит вам определить действие, которое ваш набор тестов может выполнить непосредственно перед его выполнением (перезапустить сервер в правильном режиме), и другое действие, которое сервер может выполнить после завершения всех тестов, перезапустить все с * 1025.* установить на то, что было раньше.Вы управляете значением классов кеша через переменную окружения , как показано в этом посте .

. Все равно потребуется немного работы, чтобы все это настроить и заставить его зависать вместе,но это, вероятно, ваш лучший выбор, если вы хотите «автоматическое» решение.

0 голосов
/ 08 августа 2011

Я не думаю, что выполнение того, что вы предлагаете, сработает.

Но я полагаю, вы можете искать неправильное решение.

Если вы хотите получить доступ к своей базе данных разработки изтестирование вашего iphone, тогда почему бы не добавить новую среду.

Добавить новый файл config / environment / iphone_dev.rb

require File.dirname(__FILE__)+"/development.rb"
config.cache_classes = true

И в вашем database.yml (или mongoid.yml иличто угодно)

iphone_dev:
  host: localhost
  database: my_app_development

Нет причины, по которой база данных не может быть такой же

Теперь просто запустите rails server -eiphone_dev -p3001

У вас должен быть сервер, почти такой же, как вашсервер dev, но работает на другом порту с включенным кэшированием.

...