Использование самоцвета Bootstrap с Rails - PullRequest
0 голосов
/ 29 июня 2018

У меня есть новый проект rails, в котором я только сгенерировал контроллер. Я следовал инструкциям по установке начальной загрузки в соответствии с гемом начальной загрузки и получаю следующую ошибку:

ActionView::Template::Error (identifier '(function(opts, pluginOpts) {return eva
l(process' undefined):
     5:     <%= csrf_meta_tags %>
     6:     <%= csp_meta_tag %>
     7:
     8:     <%= stylesheet_link_tag    'application', media: 'all', 'data-turbol
inks-track': 'reload' %>
     9:     <%= javascript_include_tag 'application', 'data-turbolinks-track': '
reload' %>
    10:   </head>
    11:

(execjs):1
app/views/layouts/application.html.erb:8:in `_app_views_layouts_application_html
_erb__511219785_80461480'

Я следовал всем инструкциям на этой веб-странице: https://github.com/twbs/bootstrap-rubygem

Мой код:

# Gemfile
gem 'bootstrap', '~> 4.1.1'
gem 'jquery-rails'

# app/assets/javascripts/application.js
//= require rails-ujs
//= require activestorage
//= require turbolinks
//= require jquery3
//= require popper
//= require bootstrap
//= require_tree .

# app/assets/stylesheets/application.scss
@import "bootstrap";

Обратите внимание, я также удалил * = require и * = require_tree из application.scss и убедился, что это файл scss, а не файл css.

1 Ответ

0 голосов
/ 01 июля 2018

Это, кажется, текущая проблема с ExecJS и duktape в Windows.

См. Следующую ссылку для получения дополнительной информации: https://github.com/twbs/bootstrap-rubygem/issues/157

Короче говоря, для решения этой проблемы вы можете просто удалить / закомментировать duktape из вашего Gemfile. Если вы используете Node.js в качестве среды выполнения JS, не забудьте установить его (Node.js).

Если у вас все еще есть проблемы, удалите все директивы //= require из вашего application.scss и оставьте их в application.js.

application.js

//= require rails-ujs
//= require activestorage
//= require turbolinks
//= require_tree .
//= require jquery3
//= require popper
//= require bootstrap-sprockets

application.scss

@import "bootstrap";

Gemfile

Удалить gem 'duktape'

gem 'autoprefixer-rails'
gem 'bootstrap', '~> 4.1.1'
gem 'jquery-rails'

Из комментария к вопросу:

duktape стала JS Runtime по умолчанию в Windows некоторое время назад в рельсы / рельсы # 30014.

Если вы посмотрите на другие подобные проблемы, связанные с Exejs, вы можете найти из-за того, что Duktape на самом деле является виновником (однако его execjs здесь для определение контекста дуктапе). Если вы измените среду выполнения чтобы использовать Nodejs, ошибка будет устранена, как в случае с @ Yasunari89

In config/boot.rb ENV ['EXECJS_RUNTIME'] = 'Узел'

Вы можете найти больше информации в # 152, # 153 и # 155. Тем не менее, выше вопросов с неверным регулярным выражением было исправлено с новой версией duktape, для более Инфо посещение judofyr / duktape.rb # 41 Новая версия, которая разрешила недопустимая проблема с регулярным выражением, возникла проблема, с которой вы столкнулись сейчас. Эта проблема возникает из-за (как определено в execjs) duktape не поддерживает сложные контексты и полный JS как идентификатор.

Однако PR находится на рассмотрении, что, возможно, решит проблему, спасибо @ judofyr

Вы также должны убедиться, что ваш application.html.erb настроен правильно. Вот пример:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

        <title>title</title>

        <%= csrf_meta_tags %>
        <%= csp_meta_tag %>

        <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
        <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
    </head>

    <body>
        <div class="container">
            <%= yield %>
        </div>
  </body>
</html>

ExecJS поддерживает несколько сред выполнения, не только duktape и NodeJS. https://github.com/rails/execjs

ExecJS supports these runtimes:

therubyracer - Google V8 embedded within Ruby
therubyrhino - Mozilla Rhino embedded within JRuby
Duktape.rb - Duktape JavaScript interpreter
Node.js
Apple JavaScriptCore - Included with Mac OS X
Microsoft Windows Script Host (JScript)
Google V8
mini_racer - Google V8 embedded within Ruby
...