Rails не перезагружает контроллеры, хелперы при каждом запросе во FreeBSD 9.1

Я обнаружил странное поведение рельсов. Пожалуйста, дайте мне совет!

Например, у меня есть такой код:

def new
  raise
end

Я запускаю сервер rails в режиме разработки. Нажмите обновить в браузере и посмотрите

RuntimeError в AuthenticationController#new

Хорошо. Я комментирую строку с «поднять» следующим образом:

def
  # raise
end

Нажмите «Обновить» в браузере, но снова я вижу эту ошибку, как показано выше. Хотя в браузере я вижу код с закомментированным "поднять".

Я предполагаю, что контроллеры, помощники и т. д. перезагружаются, но рельсы возвращают кешированные результаты.

config/environments/development.rb:

Rails.application.configure do
  # BetterErrors::Middleware.allow_ip! '192.168.78.0/16'

  # In the development environment your application's code is reloaded on
  # every request. This slows down response time but is perfect for development
  # since you don't have to restart the web server when you make code changes.
  config.cache_classes = false

  # Do not eager load code on boot.
  config.eager_load = false

  # Show full error reports and disable caching.
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send.
  config.action_mailer.raise_delivery_errors = false

  # Print deprecation notices to the Rails logger.
  config.active_support.deprecation = :log

  # Raise an error on page load if there are pending migrations.
  config.active_record.migration_error = :page_load

  # Debug mode disables concatenation and preprocessing of assets.
  # This option may cause significant delays in view rendering with a large
  # number of complex assets.
  config.assets.debug = true

  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
  # yet still be able to expire them through the digest params.
  config.assets.digest = true

  # Adds additional error checking when serving assets at runtime.
  # Checks for improperly declared sprockets dependencies.
  # Raises helpful error messages.
  config.assets.raise_runtime_errors = false

  # Raises error for missing translations
  # config.action_view.raise_on_missing_translations = true
end

Как я запускаю сервер:

=> Booting Puma
=> Rails 4.2.1.rc3 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Puma 2.11.1 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://0.0.0.0:3000

Любые предложения, пожалуйста.

ОБНОВЛЕНИЕ 1. Этой проблемы нет в Ubuntu 14.04, но есть во FreeBSD 9.1.

Я создал простое приложение и протестировал его сначала во FreeBSD (та же проблема), а затем в Ubuntu (без проблем).

Не могли бы вы помочь мне советом, как справиться с этой проблемой на FreeBSD 9.1?


person Kesha Antonov    schedule 05.03.2015    source источник
comment
Опубликовано на трекере rails как проблема: github.com/rails/rails/issues/19277   -  person Kesha Antonov    schedule 12.03.2015
comment
Хорошо. Я понял это. Это была проблема NFS. Я не знаю, какие параметры конфигурации должны быть установлены, но если я работаю с локальным приложением, все в порядке.   -  person Kesha Antonov    schedule 12.03.2015


Ответы (4)


Была такая же проблема с Rails 5 + Vagrant + Ubuntu 16. Ни одно из других решений не сработало (время моего гостя и хоста синхронизировано).

Единственное, что у меня сработало, это закомментировать следующую строку из config/environments/development.rb:

config.file_watcher = ActiveSupport::EventedFileUpdateChecker

Думал, что опубликую это на случай, если кто-то еще попадет на эту страницу с похожей проблемой, как и я.

person DannyB    schedule 21.09.2016
comment
та же проблема, я также удаляю прослушивание гемм из гемфайла - person Alexis; 25.11.2016
comment
Та же настройка, и мое время vagrant/mac уже было синхронизировано, поэтому принятое решение не помогло. Но ЭТО получилось, спасибо! - person jpw; 02.02.2017
comment
Rails 5 вызывает несколько проблем у пользователей Vagrant, и команда Rails не считает это проблемой, как указано в этот билет - возможно, если больше людей будут жаловаться на проблемы, связанные с бродягой, команда поймет, что это не неясный путь развития. - person DannyB; 02.02.2017
comment
Это тоже было моим решением, хотя я не бродяга. Я использую нативную бета-версию Docker в OS X (по состоянию на 27.06.17), и все мои приложения rails 4.x работают с этой настройкой, кроме этого нового приложения, которое я начал на rails 5. Закомментировал EventedFileUpdateChecker от моего разработчика config, и теперь он работает. - person eggie5; 28.06.2017
comment
Я думаю, что отключение этой «функции» устранило проблему, с которой я столкнулся и в Docker OS X, когда я обновлял код в контроллере, но изменение не было зарегистрировано, поэтому мне пришлось бы полностью перезапустить контейнер докера для моего нового контроллера. код для запуска. Очень расстраивает. Пока это работает хорошо. Если это решит проблему, это огромная помощь - person FireDragon; 27.10.2020


Пожалуйста, проверьте, действительно ли вы запускаете приложение в режиме разработки, а не в режиме производства.

Также проверьте файл /config/environments/development.rb, чтобы узнать, отключены ли классы кеша:

config.cache_classes = false

Этот другой пост может вам помочь .

person Rafael Martinez    schedule 05.03.2015
comment
Эй, Рафаэль! Спасибо за ответ. Я обновил свой вопрос с помощью development.rb и доказательства того, что я использую режим разработки сервера. - person Kesha Antonov; 05.03.2015
comment
Спасибо, чувак - это спасло меня, когда несколько других ответов не помогли! - person Joshua Book; 14.09.2018

Rails.application.reloader.reload!

найдено с помощью method(:reload!).source в консоли рельсов.

(рельсы 6)

person localhostdotdev    schedule 15.04.2019