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

Почему gem `therubyracer` закомментирован по умолчанию в Gemfile?

Я создал приложение rails и попытался запустить сервер rails. Я получил следующую ошибку:

/home/ritesh/.rvm/gems/ruby-1.9.3-p429/gems/execjs-2.0.1/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
from /home/ritesh/.rvm/gems/ruby-1.9.3-p429/gems/execjs-2.0.1/lib/execjs.rb:5:in `<module:ExecJS>'
from /home/ritesh/.rvm/gems/ruby-1.9.3-p429/gems/execjs-2.0.1/lib/execjs.rb:4:in `<top (required)>'
from /home/ritesh/.rvm/gems/ruby-1.9.3-p429/gems/uglifier-2.2.1/lib/uglifier.rb:3:in `require'
from /home/ritesh/.rvm/gems/ruby-1.9.3-p429/gems/uglifier-2.2.1/lib/uglifier.rb:3:in `<top (required)>'
from /home/ritesh/.rvm/gems/[email protected]/gems/bundler-1.3.5/lib/bundler/runtime.rb:72:in `require'
from /home/ritesh/.rvm/gems/[email protected]/gems/bundler-1.3.5/lib/bundler/runtime.rb:72:in `block (2 levels) in require'
from /home/ritesh/.rvm/gems/[email protected]/gems/bundler-1.3.5/lib/bundler/runtime.rb:70:in `each'
from /home/ritesh/.rvm/gems/[email protected]/gems/bundler-1.3.5/lib/bundler/runtime.rb:70:in `block in require'
from /home/ritesh/.rvm/gems/[email protected]/gems/bundler-1.3.5/lib/bundler/runtime.rb:59:in `each'
from /home/ritesh/.rvm/gems/[email protected]/gems/bundler-1.3.5/lib/bundler/runtime.rb:59:in `require'
from /home/ritesh/.rvm/gems/[email protected]/gems/bundler-1.3.5/lib/bundler.rb:132:in `require'
from /home/ritesh/projects/interview/config/application.rb:7:in `<top (required)>'
from /home/ritesh/.rvm/gems/ruby-1.9.3-p429/gems/railties-4.0.0/lib/rails/commands.rb:76:in `require'
from /home/ritesh/.rvm/gems/ruby-1.9.3-p429/gems/railties-4.0.0/lib/rails/commands.rb:76:in `block in <top (required)>'
from /home/ritesh/.rvm/gems/ruby-1.9.3-p429/gems/railties-4.0.0/lib/rails/commands.rb:73:in `tap'
from /home/ritesh/.rvm/gems/ruby-1.9.3-p429/gems/railties-4.0.0/lib/rails/commands.rb:73:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'

хотя я смог исправить это, удалив комментарий перед строкой gem 'therubyracer', platforms: :ruby из Gemfile.

Почему этот жемчуг прокомментирован, когда мы требуем его на первом месте при запуске приложения rails?

4b9b3361

Ответ 1

Потому что, если на компьютере установлена ​​другая среда выполнения JavaScript (например, Node.js), Rails может использовать это, а therubyracer не требуется.

Rails использует ExecJS для загрузки среды выполнения JavaScript. Для получения дополнительной информации о ExecJS см. Его страницу Github: https://github.com/sstephenson/execjs. В файле readme представлен список используемых во время автономной работы (в качестве заметок журнала ошибок).

В зависимости от процесса развертывания и производственной среды, может быть, не имеет значения, какое время выполнения JavaScript вы используете. У некоторых людей есть проблемы с размером библиотеки therubyracer (см. Rails - Не удалось найти исполняемый файл JavaScript?), и может быть неудобно устанавливать его на вашем производстве сервер.