Rails 3.1 не перезагружает измененные представления - PullRequest
7 голосов
/ 07 июля 2011

Я вижу ошибку / функцию в моих приложениях на Ruby 1.9.2. Любые изменения в представлениях (не в рубиновых файлах) требуют перезагрузки сервера. Изначально я столкнулся с этим в приложении на Rails, но я тестировал то же самое и в минимальном приложении Sinatra.

Я включу простое приложение для демонстрации

# testapp.rb
require 'sinatra'

get '/' do
  [0,1,2].to_s  #change this to [0,1].to_s
end

Это моя процедура:

  • ruby testapp.rb (запускает тонкий сервер для меня)
  • загрузить страницу
  • открыть файл и отредактировать вид
  • перезагрузить страницу (я не вижу изменений)
  • убить сервер
  • перезагрузите сервер (изменения видны теперь)

Последние несколько месяцев я работал над Ruby 1.8.7 на Rails 3. Необходимость перезапуска сервера при любом изменении представления сильно замедляет разработку.

Я готов этот поток SO , но в моей версии Rails (3.1.0 rc4) переменная config уже установлена ​​в соответствии с этим ответом. Кроме того, я могу повторить ошибку, используя Sinatra, так что не похоже, что это так.

Может кто-нибудь пролить свет на эту проблему?

Версия Ruby: ruby ​​1.9.2p180 (2011-02-18, редакция 30909) [x86_64-linux] Сервер: тонкий 1.2.11 (также проверял это с помощью Sinatra / Webrick)

РЕДАКТИРОВАТЬ 7/13, Уточнение Проблема с Sinatra - это отдельная проблема - перезагрузка исходного кода Sinatra по умолчанию отключена. Я использовал этот код для проверки поведения:

require 'sinatra'
require 'sinatra/reloader'
require 'haml'

set :views, 'views'

get '/' do
end

get '/test' do
  haml :test
end

С этим я сделал файл: views/test.haml. Изменение его во время работы сервера показывает изменение при перезагрузке страницы. Спасибо Tiredpixel за указание на это

Нерешенная проблема : почему Rails 3.1 на Ruby 1.9.2 не перезагружает views ? Я могу получить файлы ruby ​​для загрузки, но не файлы haml и erb. Я перезагружаю сервер, чтобы посмотреть, была ли ошибка исправлена ​​(или не исправлена) из-за неправильной загрузки файла.

РЕДАКТИРОВАТЬ / РЕШЕНИЕ (скопировано из моего комментария в принятом ответе) :

Проблема была в config/environments/development.rb

config.cache_classes = false

Даже после того, как мы проверили, что это правильно, у нас все еще была проблема. Далее в файле у нас было:

config.threadsafe!

Для этого установлены следующие 3 флага: config.allow_concurrency, config.preload_frameworks и (сюрприз!) config.cache_classes.

Исправить: переместите config.threadsafe! выше config.cache_classes, чтобы оно не было неявно переопределено.

1 Ответ

7 голосов
/ 14 июля 2011

Rails обычно настраивается на автоматическую перезагрузку при каждом запросе в среде разработки.Однако этого не происходит с файлами в lib/.

Опыт, который вы описываете с Sinatra, предназначен (автоматическая перезагрузка была удалена в 0.9.2): http://www.sinatrarb.com/faq.html#reloading; Дробовик gem может быть установлен для выполнения этой перезагрузки.

...