每次我更改控制器或模型中的任何内容时,我都必须重新启动服务器才能使其生效。但情况并非总是如此,以前它曾经正常工作,当我改变任何东西时,但我不知道我不知道现在发生了什么?
我的Rails版本 3.2.11
在我的开发环境文件中,我有设置config.cache_classes = false。
请帮助..
我的development.rb文件如下
Testapp::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
# 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
# Log error messages when you accidentally call methods on nil.
config.whiny_nils = true
# 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
# Only use best-standards-support built into browsers
config.action_dispatch.best_standards_support = :builtin
# Raise exception on mass assignment protection for Active Record models
config.active_record.mass_assignment_sanitizer = :strict
# Log the query plan for queries taking more than this (works
# with SQLite, MySQL, and PostgreSQL)
config.active_record.auto_explain_threshold_in_seconds = 0.5
# Do not compress assets
config.assets.compress = false
# Expands the lines which load the assets
config.assets.debug = true
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
end
答案 0 :(得分:57)
我有答案..
在我的config/environments/development.rb
文件中添加以下行后,我的问题已得到解决。
config.reload_classes_only_on_change = false
答案 1 :(得分:8)
使用控制台
中的以下命令启动服务器rails server -e development
如果没有启动,则提供您的rails版本以及您用于运行轨道应用程序的服务器。
更多配置
将您的config/environments/development.rb
文件修改为:
config.serve_static_assets = false
答案 2 :(得分:5)
VirtualBox 用户有一个很好的说明,由用户Ninjaxor发布为评论:
对于Vagrant /虚拟盒子用户,如果主机时钟存在错误 和客人的时钟不同步,它borks rails的重新加载器。 https://github.com/rails/rails/issues/16678
您在以下目录中找到的文件Vagrantfile
:
.../ruby/gems/sass-3.4.22/vendor/listen
你必须添加这个:
# Sync time every 5 seconds so code reloads properly
config.vm.provider :virtualbox do |v|
v.customize ["guestproperty", "set", :id, "--timesync-threshold", 5000]
end
感谢GitHub上的用户axsuul!
答案 3 :(得分:2)
我注意到设置
config.cache_classes = false
是我的诀窍。
答案 4 :(得分:2)
出现这种情况的另一种情况是在虚拟化环境中,在主机操作系统上编辑文件,而来宾操作系统的文件事件管理器不会为文件更改生成事件。
针对这种情况的解决方案是在config/environments/development.rb
中注释掉以下行:
# Use an evented file watcher to asynchronously detect changes in source code,
# routes, locales, etc. This feature depends on the listen gem.
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
因此给予:
# Use an evented file watcher to asynchronously detect changes in source code,
# routes, locales, etc. This feature depends on the listen gem.
# config.file_watcher = ActiveSupport::EventedFileUpdateChecker
这迫使Rails实际检查文件修改时间,而不是期望得到文件系统事件。