J'ai remarqué que mon serveur Rails ne rechargeait pas les contrôleurs, les modèles et probablement aucun autre fichier après leur modification. J'utilise les API Vagrant et Rails et j'ai constaté que certaines personnes résolvent ce problème en ajoutant une ligne à la variable Vagrantfile
.
config.vm.provider "virtualbox" do |vb|
vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 5000 ]
end
Cela ne résout pas le problème pour moi. Je suis à court d’idées de ce que je peux faire pour résoudre ce problème. Je joins des fichiers qui pourraient vous être utiles.
Ma Gemfile
ressemble à ceci:
source 'https://rubygems.org'
gem 'rake', '< 11.0'
# Bundle Edge Rails instead: gem 'Rails', github: 'Rails/rails'
gem 'Rails', '>= 5.0.0.beta3', '< 5.1'
# Use mysql as the database for Active Record
# gem 'mysql2', '>= 0.3.18', '< 0.5'
# User PostgreSQL as the database for Active Record
gem 'pg', '~> 0.18'
gem 'active_model_serializers'
gem 'rspec-its'
gem 'database_cleaner'
# Use Puma as the app server
gem 'puma'
# Build JSON APIs with ease. Read more: https://github.com/Rails/jbuilder
# gem 'jbuilder', '~> 2.0'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 3.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'
# Gem allowing using external APIs
gem 'httparty'
# Auth0 gem for authentication using JWT
gem 'knock'
gem 'jwt'
# OpenID Omniauth gem for authenticating Steam users
gem 'omniauth-Steam'
# Gem for managing environment variables
gem 'figaro'
# Use Capistrano for deployment
# gem 'capistrano-Rails', group: :development
# Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-Origin AJAX possible
gem 'rack-cors', :require => 'rack/cors'
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug'
gem 'rspec-Rails', '~> 3.0'
gem 'factory_girl_Rails'
gem 'ffaker'
end
group :test do
gem 'shoulda-matchers'
gem 'json-schema'
end
group :development do
gem 'listen', '~> 2.10'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/Rails/spring
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
Je suis sûr que je lance mon serveur en mode développement, à cause du début du journal
=> Booting Puma
=> Rails 5.0.0.beta3 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 starting in single mode...
* Version 3.1.0 (Ruby 2.2.3-p173), codename: El Niño Winter Wonderland
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Ceci est mon fichier development.rb
Rails.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
# Do not eager load code on boot.
config.eager_load = false
# Show full error reports.
config.consider_all_requests_local = true
# Enable/disable caching. By default caching is disabled.
if Rails.root.join('tmp/caching-dev.txt').exist?
config.action_controller.perform_caching = true
config.action_mailer.perform_caching = false
config.cache_store = :memory_store
config.public_file_server.headers = {
'Cache-Control' => 'public, max-age=172800'
}
else
config.action_controller.perform_caching = false
config.action_mailer.perform_caching = false
config.cache_store = :null_store
end
# 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
# Raises error for missing translations
# config.action_view.raise_on_missing_translations = true
# 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
end
Ma Vagrantfile
Vagrant.configure(2) do |config|
if Vagrant.has_plugin?("vagrant-timezone")
config.timezone.value = "Europe/Warsaw"
end
config.vm.box = "ubuntu/trusty64"
config.vm.network :forwarded_port, guest: 3000, Host: 3000
config.vm.synced_folder "E:/Projekty - Rails", "/home/projekty"
config.vm.provider "virtualbox" do |vb|
vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 5000 ]
end
end
J'ai résolu mon problème en ajoutant la ligne ci-dessous au fichier development.rb
.
config.reload_classes_only_on_change = false
Cela ne résout pas le problème pour moi.
ajouter au config/environments/development.rb
#config.file_watcher = ActiveSupport::EventedFileUpdateChecker
config.file_watcher = ActiveSupport::FileUpdateChecker
FileUpdateChecker
détectera en interrogeant le changement du fichier.
la solution de pocari a fonctionné pour moi, mais j'ai dû attendre quelques secondes avant de recharger une page, sinon le contenu n'était pas toujours mis à jour.
Ajouter une option au synced_folder
comme décrit dans cette réponse a bien fonctionné:
config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['actimeo=1']
(et le changement de development.rb
n'est pas nécessaire)
J'avais le même problème alors j'ai créé un script rapide bump
comme celui-ci. Assurez-vous d’être d’abord dans le dossier de votre application.
!#/bin/bash
rake db:migrate
echo "MIGRATED"
rake routes
echo "routed"
Sudo service Apache2 restart
echo "web server reloaded"
Maintenant, vous pouvez simplement taper ./bump
et il va exécuter les trois commandes, alors vous savez que tout est chargé. J'utilise également cette méthode pour répéter cette opération, à l'instar de la ligne de commande qui installe des gems tels que devise