Я вижу ошибку / функцию в моих приложениях на 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
, чтобы оно не было неявно переопределено.