При загрузке гема uglifier произошла ошибка. (Bundler :: GemRequireError)

119

Почему я получаю эту ошибку?

shibly@mybox:~/blog$ rails server
/home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:80:in `rescue in block (2 levels) in require': There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError)
    from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
    from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:72:in `each'
    from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:72:in `block in require'
    from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:61:in `each'
    from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:61:in `require'
    from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler.rb:99:in `require'
    from /home/shibly/blog/config/application.rb:7:in `<top (required)>'
    from /home/shibly/.gem/ruby/2.2.4/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:78:in `require'
    from /home/shibly/.gem/ruby/2.2.4/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:78:in `block in server'
    from /home/shibly/.gem/ruby/2.2.4/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:75:in `tap'
    from /home/shibly/.gem/ruby/2.2.4/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:75:in `server'
    from /home/shibly/.gem/ruby/2.2.4/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
    from /home/shibly/.gem/ruby/2.2.4/gems/railties-4.2.5/lib/rails/commands.rb:17:in `<top (required)>'
    from bin/rails:9:in `require'
    from bin/rails:9:in `<main>
shibly
источник
Вы решили эту проблему? У меня точно такая же проблема. Я запускаю Ruby 2.2.4 с рельсами 4.2.5 на ubuntu.
Просто ученик
2
попробуйте sudo apt-get install nodejs
user3754535

Ответы:

252

Вы должны выполнить следующую команду, чтобы установить NodeJS в Ubuntu

sudo apt-get install nodejs

или запустите это для OSX

brew install nodejs

Uglifier - это оболочка JS, и для нее требуется запущенная среда выполнения JS или интерпретатор JS. Я бы выбрал установку NodeJS.

Маркос Серпа
источник
4
зачем ему js env?
DragonKnight
1
Работает :) Спасибо, а зачем нам устанавливать этот nodejs?
Alankar More
1
Нам нужна среда выполнения JS, @AlankarMore;). Итак, обычно я выбираю NodeJS, в основном потому, что он построен на движке Chrome V8 ( developers.google.com/v8 ). Сегодня у нас в Rails много JS. И нам нужна среда для запуска всего этого. Сюда входят оболочки, среды выполнения / интерпретаторы ...
Маркос Серпа,
1
При установке nodejs из исходного кода убедитесь, что двоичный файл установлен /usr/bin/nodejsтам, где execjs ожидает его найти.
Рок Стрниша 03
1
@AboozarRajabi Nodejs не важен, но среда выполнения или интерпретатор JS важны. И это роль NodeJS в нашем случае. Если не NodeJS, вам понадобится другая среда выполнения / интерпретатор JS.
Маркос Серпа
36

В стандартном Rails Gemfile строка для драгоценного камня therubyracer закомментирована. Если вы его раскомментируете, вы получите этот драгоценный камень, и он должен работать.

Из « Начало работы с Rails »:

Для компиляции CoffeeScript и сжатия ресурсов JavaScript требуется, чтобы в вашей системе была доступна среда выполнения JavaScript, в отсутствие среды выполнения вы увидите execjsошибку во время компиляции ресурсов. Обычно Mac OS X и Windows поставляются с установленной средой выполнения JavaScript. Rails добавляет therubyracerдрагоценный камень в сгенерированную Gemfileстроку с комментариями для новых приложений, и вы можете раскомментировать, если вам это нужно. therubyrhinoявляется рекомендуемой средой выполнения для пользователей JRuby и по умолчанию добавляется Gemfileв приложения, созданные под JRuby. Вы можете изучить все поддерживаемые среды выполнения на ExecJS .

user3780968
источник
2
Спасибо! Это было проще и кажется чище, чем полагаться на NodeJS.
ConnorWGarvey
Хотя этот ответ работает, он ускользает от того, что вам лучше иметь (для производства) надлежащую среду выполнения execjs, такую ​​как node.js
Сирил Дюшон-Дорис
0

Произошла ошибка при создании db.

Проблема в том, что Node.js пытался установить без sudoскрипта:

sudo apt-get install nodejs
Глеб Глазков
источник