web-dev-qa-db-fra.com

Le serveur Rails ne voit pas les changements de code et ne recharge pas les fichiers

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
13
mparkitny

J'ai résolu mon problème en ajoutant la ligne ci-dessous au fichier development.rb.

config.reload_classes_only_on_change = false
15
mparkitny

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.

51
pocari

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)

1
Michaël Witrant

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 

0
failpractice