簡體   English   中英

在Rails中使用Bootstrap gem

[英]Using Bootstrap gem with Rails

我有一個新的rails項目,我只生成一個控制器。 我按照bootstrap gem按照指示安裝bootstrap,我不斷收到以下錯誤:

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文件。

這似乎是Windows上ExecJS和duktape的當前問題。

有關更多信息,請參閱以下鏈接: 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";

的Gemfile

刪除gem 'duktape'

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

從對該問題的評論:

duktape之前在rails / rails#30014中已成為Windows中的默認JS Runtime。

如果你研究其他涉及Exejs的類似問題,你可能會發現duktape實際上是罪魁禍首(不過它的execjs在這里定義了duktape上下文)。 如果更改運行時環境以使用Nodejs,則會解決錯誤,如@ yasunari89的情況

config/boot.rb ENV ['EXECJS_RUNTIME'] ='節點'

您可以在#152,#153和#155中找到更多信息。 但是,無效正則表達式的上述問題已通過duktape的新版本修復,更多信息請訪問judofyr / duktape.rb#41解決了無效正則表達式問題的新版本開始引發您現在遇到的問題。 出現此問題是因為(如execjs中所定義)duktape不支持復雜的上下文和完整的JS作為標識符。

然而,由於@judofyr,正在審查PR可能會解決問題

您還應確保正確設置了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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM