Rails 5: производство rails с config.eager_load = true завершается неудачно, в то время как gem 'gem_name' требует: false - PullRequest
0 голосов
/ 03 октября 2018

Я изо всех сил пытался развернуть приложение в рабочей среде с config.eager_load = true.

Я знаю, что эта конфигурация загружает большую часть Rails и кода приложения в память, и это хорошая возможность иметь в работе (например,), проблема в том, что у меня есть собственный движок rails с некоторым кодом, который используется только в определенных модулях кода моего основного приложения, и он требуется только для определенных файлов.

Мой пользовательский движок устанавливается следующим образом: Gemfile :

gem 'gem_name', require: false

и требуется в таких файлах:

require 'gem_name'

Итак, когда я запускаюrails s -e production (с активированным config.eager_load = true) происходит сбой автоматически со следующей ошибкой

bootsnap / load_path_cache / core_ext / kernel_require.rb: 58: in `load': Нет такого файла для загрузки (LoadError)

Любые идеи о том, как заставить eager_load работать, когда гем не требуется в Gemfile ?

gem 'gem_name', require: false

И какие проблемы у меня могут возникнуть, еслиet eager_load в false в производственных (подобных) средах?

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Для тех, кому требуется автоматически загружать все файлы в каталоге, а не требовать их, вы можете сделать это:

Dir.glob(File.join(some_path, 'lib', 'extensions', '*.rb')).map do |file| autoload File.basename(file).gsub('.rb', '').classify.to_sym, file end

вместо классического

Dir[File.join(some_path, 'lib', 'extensions', '*.rb')].each do |f| require f end

0 голосов
/ 05 октября 2018

Я немного исследовал, попробуйте обновить gem bootsnap, попробуйте удалить «bootsnap-load-path-cache» и «bootsnap-compile-cache» из папки tmp / cache.Эта статья может помочь понять нетерпеливую нагрузку https://blog.arkency.com/2014/11/dont-forget-about-eager-load-when-extending-autoload/

Эта тема может помочь понять Какое влияние eager_load = true?

указывает на другое решение,не требуется, но автозагрузка (http://www.rubyinside.com/ruby-techniques-revealed-autoload-1652.html)

Из руководств (пожалуйста, прочитайте) : https://guides.rubyonrails.org/autoloading_and_reloading_constants.html#autoload-paths-and-eager-load-paths

...