【问题标题】:Using Bootstrap gem with Rails在 Rails 中使用 Bootstrap gem
【发布时间】:2018-12-08 20:39:36
【问题描述】:

我有一个新的 Rails 项目,我只生成了一个控制器。我已按照引导程序 gem 的说明安装引导程序,但我不断收到以下错误:

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";

请注意,我还确实从 application.scss 中删除了 *= require 和 *= require_tree,并确保它是一个 scss 文件而不是一个 css 文件。

【问题讨论】:

标签: ruby-on-rails twitter-bootstrap bootstrap-4 ruby-on-rails-5


【解决方案1】:

这似乎是 ExecJS 和 duktape 在 Windows 上的当前问题。

查看以下链接了解更多信息:https://github.com/twbs/bootstrap-rubygem/issues/157

简而言之,要解决此问题,您只需从 Gemfile 中删除/注释掉 duktape。如果您打算使用 Node.js 作为 JS 运行时,请记住实际安装它 (Node.js)。

如果仍有问题,请从 application.scss 中删除所有 //= require 指令,并将其保留在 application.js 中。

application.js

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

application.scss

@import "bootstrap";

宝石文件

删除gem 'duktape'

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

来自对该问题的评论:

duktape 已成为 Windows 中默认的 JS 运行时 rails/rails#30014.

如果您查看涉及 Exejs 的其他类似问题,您可能会发现 出 duktape 实际上是罪魁祸首(但是它的 execjs 在这里 duktape 上下文的定义)。如果您更改运行时环境 使用Nodejs,错误将得到解决,如 @yasunari89

config/boot.rbENV['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

【讨论】:

    猜你喜欢
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多