webentwicklung-frage-antwort-db.com.de

Der Rails-Server sieht keine Codeänderungen und lädt Dateien nicht neu

Ich habe festgestellt, dass mein Rails-Server keine Controller, Modelle und möglicherweise auch andere Dateien nach dem Ändern neu lädt. Ich verwende Vagrant und Rails API, und ich habe festgestellt, dass einige Leute dieses Problem beheben, indem sie unten in Vagrantfile eine Zeile hinzufügen.

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

Es behebt das Problem nicht für mich. Mir gehen die Ideen aus, was ich sonst noch tun kann, um dieses Problem zu lösen. Ich füge Dateien hinzu, die für Sie nützlich sein könnten.

Mein Gemfile sieht so aus:

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]

Ich bin sicher, dass ich meinen Server im Entwicklungsmodus betreibe, da das Protokoll anfängt

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

Dies ist meine development.rb-Datei

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

Meine 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

Ich habe mein Problem gelöst, indem ich der development.rb-Datei eine Zeile unterhalb hinzugefügt habe.

config.reload_classes_only_on_change = false
15
mparkitny

Es behebt das Problem nicht für mich.

zum config/environments/development.rb hinzufügen

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

FileUpdateChecker erkennt dies durch Abfragen der Änderung der Datei.

51
pocari

die Lösung von pocari funktionierte für mich, aber ich musste einige Sekunden warten, bevor eine Seite neu geladen wurde. Andernfalls wurde der Inhalt nicht immer aktualisiert.

Hinzufügen einer Option zum synced_folder wie in diese Antwort funktionierte einwandfrei:

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

(und die Änderung von development.rb ist nicht notwendig)

1

Ich hatte das gleiche Problem, also machte ich ein schnelles Skript bump so. Stellen Sie sicher, dass Sie sich zuerst in Ihrem App-Ordner befinden.

!#/bin/bash

rake db:migrate
echo "MIGRATED"
rake routes
echo "routed"
Sudo service Apache2 restart
echo "web server reloaded"

Jetzt können Sie einfach ./bump eingeben und es werden alle drei Befehle ausgeführt. Dann wissen Sie, dass alles geladen ist. Ich verwende diese Methode auch, um dies wie die Befehlszeileninstallationen für Edelsteine ​​wie "devise" zu wiederholen. 

0
failpractice