Подтвердить что ты не робот

Как перезагрузить драгоценный камень по каждому запросу в режиме разработки?

У меня есть приложение Rails, в котором используется драгоценный камень, который я активно развиваю. Как я могу приказать приложению перезагрузить камень по каждому запросу?

4b9b3361

Ответ 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

Ответ 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