2016-03-12 15 views
11

Ho notato che il mio server di rotaie non ricarica i controller, i modelli e probabilmente altri file dopo averli modificati. Uso l'API di Vagrant e Rails e ho scoperto che alcune persone risolvono questo problema aggiungendo la riga sottostante allo Vagrantfile.Il server Rails non vede le modifiche al codice e ricarica i file

config.vm.provider "virtualbox" do |vb| 
    vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 5000 ] 
end 

Non risolve il problema per me. Sono a corto di idee cos'altro posso fare per risolvere questo problema. Allego file che potrebbero essere utili per te.

mio Gemfile assomiglia a questo:

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] 

Sono sicuro che ho eseguito il mio server in modalità di sviluppo, a causa della beggining del registro

=> 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 

Questo è il mio file di 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 

My 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 
+0

Nel file di development.rb, si può aggiungere config.threadsafe! linea. Si prega di verificare che funzioni o no? –

+0

@MohammadShahadatHossain causa l'erorr quando provo ad avviare il server. Io uso l'API delle rotaie, quindi probabilmente il motivo per cui, giusto? – mparkitny

+0

utilizzando rails api non dovrebbe essere un problema. Potrebbe esserci qualche configurazione mancante e questo è il motivo per cui si è verificato il problema. –

risposta

10

Ho risolto il problema aggiungendo sotto la riga al file development.rb.

config.reload_classes_only_on_change = false 
+0

Questo per qualche ragione ha reso il mio server Puma molto lento e ha iniziato a interrompere alcuni dei miei percorsi di sessione utente. Strano. Proverò di nuovo e vedere se succede ancora. –

+0

Sì, mi dà un errore di lettura ': # problema. Non sono sicuro se sia causato dal cambiamento o da un effetto collaterale di qualcos'altro che ho fatto di sbagliato. –

+0

@JayKilleen Non stavo usando Devise nel mio progetto, quindi non ho riscontrato questo tipo di errori. Dopo una rapida ricerca ho trovato la soluzione possibile al tuo problema. Puoi leggere di più [link] (http://stackoverflow.com/a/27990374/3648015) e provarlo. – mparkitny

0

Avevo lo stesso problema, quindi quello che ho fatto è stato creare uno script veloce come questo. Assicurati di essere prima nella cartella dell'app.

$ sudo nano urto

#!/Bin/bash

rake db: la migrazione echo "migrato" percorsi rake echo "instradato" servizio sudo apache2 restart echo "web server ricaricati "

CTL + x, Y, immettere

sudo chmod + x urto

ora puoi semplicemente digitare ./bump ed eseguirà tutti e tre i comandi, quindi sai che tutto è caricato. Uso anche questo metodo per ripetere questo come le installazioni da riga di comando per gemme come ad esempio Devise.

46

It doesn't fix the problem for me.

aggiungere alla config/environments/development.rb

#config.file_watcher = ActiveSupport::EventedFileUpdateChecker 
config.file_watcher = ActiveSupport::FileUpdateChecker 

FileUpdateChecker rileverà interrogando il cambiamento del file.

+0

cambiato nel mio development.rb e funziona come un incantesimo - grazie – Hannes

+0

ha funzionato anche per me. Ho sofferto per più di 2 settimane pensando che sia un bug con Rails 5 beta. Grazie! – Abdulaziz

+3

ciao, Rev3rse. Usando la cartella condivisa della Virtual Box, questo problema si è verificato. Poiché il sistema operativo (in esecuzione vm) non è in grado di rilevare l'evento di modifica del file nelle cartelle condivise. – pocari

0

La soluzione di pocari ha funzionato per me ma ho dovuto attendere qualche secondo prima che la pagina si ricaricasse, altrimenti il ​​contenuto non veniva sempre aggiornato.

Aggiunta un'opzione per il synced_folder come descritto nella this answer ha funzionato bene:

config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['actimeo=1'] 

(e la variazione development.rb non è necessario)

Problemi correlati