В настоящее время я работаю над рубиновым приложением, но он работает очень (очень!) Медленно .. До сих пор я пробовал пару вещей, и я мог сузить это касается основной проблемы: Ruby пытается искать ее в каждом отдельном каталоге в $ LOAD_PATH.Запуск приложения Ruby ужасно медленно из-за необходимости от GEM_HOME
В основном, что я наблюдаю, это то, что рубин просматривает лот файлов, пытаясь выяснить, существует ли там необходимость. Если он их не найдет, он перейдет в следующий каталог. Самое приятное, что я вижу, как это происходит с strace. Существует много продукции, как это:
open("/boa_proj_build/nsteen/.gem/gems/i18n-0.7.0/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/thread_safe-0.3.5/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/tzinfo-1.2.2/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/minitest-5.8.2/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/activesupport-4.2.4/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/climate_control-0.0.3/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/cocaine-0.5.7/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/boa_loggable-0.2.2/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/ruby_expect-1.6.0/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/cctools-3.0.1/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/git-1.2.9.1/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/naught-1.1.0/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/symbolizer-0.0.1/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/settingslogic-2.0.9/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/memoist-0.12.0/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/highline-1.7.8/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/boa_proj_build/nsteen/.gem/gems/commander-4.3.5/lib/commander/help_formatters/base.rb", O_RDONLY|O_CLOEXEC) = 8
Как вы можете видеть, он смотрит через некоторые каталоги, чтобы найти его требования.
Трассировка это с помощью тестового приложения, фильтрация для ошибки ENOENT и подсчета мест где, отображает следующую относительно выхода:
vdi9442:/boa_proj_build/nsteen/$ strace packager --version 2>&1 | grep ENOENT | wc -l
3454261
из-конечно, 3,5 миллиона много. И это приведет к времени загрузки около 5 минут (и около половины без strace), прежде чем он выведет его номер версии (функциональность по умолчанию из драгоценного камня командира).
Я удалил весь свой домашний каталог драгоценных камней и снова проверил тест, и он сразу же быстрее, но я вижу, что он снова просматривает эти несколько драгоценных камней (зависимостей, таких как командир), но «всего» несколько тысяч случаев вместо 3,5 мил.
Моего драгоценный камень окр выглядит следующим образом:
- GEM PATHS:
- /boa_proj_build/nsteen/.gem
- /home/nsteen/.gem/ruby/2.1.0
- /cadappl/ruby/2.1.1/ruby/lib/ruby/gems/2.1.0
Похоже, рубин просто шел через весь мой путь нагрузки, чтобы удовлетворить некоторую зависимость. Все в порядке, но это просто смешно. Кто-нибудь знает, что происходит? Я не подозреваю об этом/по умолчанию?
Кто-нибудь знает, что происходит? И как я могу ускорить дело?
Рубигемы иногда могут быть невозможными. [Эта статья о сайте] (http://www.sitepoint.com/rubygems-slow/) с апреля подробно описывает некоторые из них и что можно сделать по этому поводу. – wspurgin
Из любопытства вы уже используете [bundler] (http://bundler.io/)? – wspurgin
@wspurgin, что не может быть проблемой. Это итерация по уже установленным драгоценным камням. Кроме того, Да. Использование связки. –