У меня есть приложение Rails, в котором используется драгоценный камень, который я активно развиваю. Как я могу приказать приложению перезагрузить камень по каждому запросу?
Как перезагрузить драгоценный камень по каждому запросу в режиме разработки?
Ответ 1
Это решение почти работает, но по какой-то причине я должен помещать его в application.rb
, а не в environments/development.rb
, иначе autoload_paths не распознан.
Я добавил дополнительный материал, который автоматически выбирает пути.
if Rails.env.development?
reload_gems = %w(my_gem other_gem) # names of gems which should autoreload
config.autoload_paths += Gem.loaded_specs.values.inject([]){ |a,gem| a += gem.load_paths if reload_gems.include? gem.name; a }
require 'active_support/dependencies'
ActiveSupport::Dependencies.explicitly_unloadable_constants += reload_gems.map { |gem| gem.classify }
end
Локальные камни можно добавить с помощью gem 'my_gem', :path => '../my_gem'
Ответ 2
Вы можете добавить путь к драгоценному камню в пути autoload
для приложения.
Итак, в config/application.rb в блоке class Application < Rails::Application ... end
добавьте:
config.autoload_paths += %W(#{config.root}/vendor/gems/my_gem/lib)
config.autoload_paths += Dir["#{config.root}/vendor/gems/my_gem/lib/**/"]
Затем, при запуске сервера разработки, все файлы там должны быть перезагружены.
Ответ 3
Для двигателя:
module Copycat
class Engine < ::Rails::Engine
if Rails.env.development?
config.to_prepare do
Rails.logger.debug "RELOADING COPYCAT"
require_dependency Copycat::Engine.root.join('lib', 'copycat').to_s
end
config.after_initialize do
# optional, without it will call `to_prepend` only when a file changes,
# not on every request
Rails.application.config.reload_classes_only_on_change = false
end
end
end
end
Ответ 4
Я только что нашел awesome https://github.com/colinyoung/gem_reloader - он работает для меня!
Ответ 5
Супер простое исправление:
In yourApp/config/envirornments/development.rb:
YourApp::Application.configure do
# Make sure both of these two settings are set to false, add them if you can't find them
config.cache_classes = false
config.action_controller.perform_caching = false
#
#
# Other config settings...
#
#
end