[英]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中。
//= require rails-ujs
//= require activestorage
//= require turbolinks
//= require_tree .
//= require jquery3
//= require popper
//= require bootstrap-sprockets
@import "bootstrap";
刪除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.