Ответ 1
Я решил проблему, добавив ниже строку в файл development.rb
.
config.reload_classes_only_on_change = false
Я заметил, что мой сервер rails не перезагружает контроллеры, модели и, возможно, любые другие файлы после их изменения. Я использую API Vagrant и Rails, и я обнаружил, что некоторые люди исправляют эту проблему, добавляя ниже строку к Vagrantfile
.
config.vm.provider "virtualbox" do |vb|
vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 5000 ]
end
Это не проблема для меня. У меня заканчиваются идеи, что еще я могу сделать для решения этой проблемы. Я прикрепляю файлы, которые могут вам пригодиться.
Мой Gemfile
выглядит следующим образом:
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]
Я уверен, что я запускаю свой сервер в режиме разработки из-за начала журнала
=> 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
Это мой development.rb
файл
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
# In the development environment your application 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
Мой 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
Я решил проблему, добавив ниже строку в файл development.rb
.
config.reload_classes_only_on_change = false
Это не проблема для меня.
добавить в config/environments/development.rb
#config.file_watcher = ActiveSupport::EventedFileUpdateChecker
config.file_watcher = ActiveSupport::FileUpdateChecker
FileUpdateChecker
будет обнаружен путем опроса изменения файла.
У меня была такая же проблема, поэтому я сделал быстрый script, как это. Прежде всего убедитесь, что вы находитесь в папке вашего приложения.
$sudo nano bump
#!/Bin/bash
rake db: мигрировать эхо "MIGRATED" рейк-маршруты эхо "маршрутизировано" sudo service apache2 restart echo "перезагружен веб-сервером"
CTL + x, Y, введите
sudo chmod + x bump
теперь вы можете просто ввести. /bump, и он будет запускать все три команды, тогда вы знаете, что все загружено. Я также использую этот метод, чтобы повторить это, как установка командной строки для драгоценных камней, таких как devise.
Решение pocari работало для меня, но мне пришлось подождать несколько секунд до перезагрузки страницы, иначе контент не всегда обновлялся.
Добавление опции к synced_folder
, как описано в этом ответе, работало нормально:
config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['actimeo=1']
(и изменение в development.rb
не обязательно)