Pages#home 中的 Rails ExecJS::ProgramError?
Posted
技术标签:
【中文标题】Pages#home 中的 Rails ExecJS::ProgramError?【英文标题】:Rails ExecJS::ProgramError in Pages#home? 【发布时间】:2015-04-09 21:18:18 【问题描述】:启动一个新应用程序,当我创建一个控制器页面主页并尝试转到本地主机:3000/pages/home 时,我收到以下错误:
Showing c:/Users/Doesha/desktop/pinplug/app/views/layouts/application.html.erb where line #6 raised:
TypeError: Object doesn't support this property or method
(in c:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/turbolinks-2.5.3/lib/assets/javascripts/turbolinks.js.coffee)
application.html.erb 文件:
<!DOCTYPE html>
<html>
<head>
<title>Pinplug</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
</head>
<body>
<%= yield %>
</body>
</html>
application_controller.rb 文件:
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
end
pages_controller.rb 文件:
class PagesController < ApplicationController
def home
end
end
routes.rb 文件:
Rails.application.routes.draw do
get 'pages/home'
# The priority is based upon order of creation: first created -> highest priority.
# See how all your routes lay out with "rake routes".
# You can have the root of your site routed with "root"
# root 'welcome#index'
# Example of regular route:
# get 'products/:id' => 'catalog#view'
# Example of named route that can be invoked with purchase_url(id: product.id)
# get 'products/:id/purchase' => 'catalog#purchase', as: :purchase
# Example resource route (maps HTTP verbs to controller actions automatically):
# resources :products
# Example resource route with options:
# resources :products do
# member do
# get 'short'
# post 'toggle'
# end
#
# collection do
# get 'sold'
# end
# end
# Example resource route with sub-resources:
# resources :products do
# resources :comments, :sales
# resource :seller
# end
# Example resource route with more complex sub-resources:
# resources :products do
# resources :comments
# resources :sales do
# get 'recent', on: :collection
# end
# end
# Example resource route with concerns:
# concern :toggleable do
# post 'toggle'
# end
# resources :posts, concerns: :toggleable
# resources :photos, concerns: :toggleable
# Example resource route within a namespace:
# namespace :admin do
# # Directs /admin/products/* to Admin::ProductsController
# # (app/controllers/admin/products_controller.rb)
# resources :products
# end
end
宝石文件:
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.0'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.1.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
gem 'execjs', '~> 2.2.2'
# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0', group: :doc
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'
# Use Unicorn as the app server
# gem 'unicorn'
# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug'
# Access an IRB console on exception pages or by using <%= console %> in views
gem 'web-console', '~> 2.0'
end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
gemfile.lock 文件:
GEM
remote: https://rubygems.org/
specs:
actionmailer (4.2.0)
actionpack (= 4.2.0)
actionview (= 4.2.0)
activejob (= 4.2.0)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 1.0, >= 1.0.5)
actionpack (4.2.0)
actionview (= 4.2.0)
activesupport (= 4.2.0)
rack (~> 1.6.0)
rack-test (~> 0.6.2)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.1)
actionview (4.2.0)
activesupport (= 4.2.0)
builder (~> 3.1)
erubis (~> 2.7.0)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.1)
activejob (4.2.0)
activesupport (= 4.2.0)
globalid (>= 0.3.0)
activemodel (4.2.0)
activesupport (= 4.2.0)
builder (~> 3.1)
activerecord (4.2.0)
activemodel (= 4.2.0)
activesupport (= 4.2.0)
arel (~> 6.0)
activesupport (4.2.0)
i18n (~> 0.7)
json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
arel (6.0.0)
binding_of_caller (0.7.2)
debug_inspector (>= 0.0.1)
builder (3.2.2)
byebug (3.5.1)
columnize (~> 0.8)
debugger-linecache (~> 1.2)
slop (~> 3.6)
coffee-rails (4.1.0)
coffee-script (>= 2.2.0)
railties (>= 4.0.0, < 5.0)
coffee-script (2.3.0)
coffee-script-source
execjs
coffee-script-source (1.9.0)
columnize (0.9.0)
debug_inspector (0.0.2)
debugger-linecache (1.2.0)
erubis (2.7.0)
execjs (2.2.2)
globalid (0.3.2)
activesupport (>= 4.1.0)
hike (1.2.3)
i18n (0.7.0)
jbuilder (2.2.6)
activesupport (>= 3.0.0, < 5)
multi_json (~> 1.2)
jquery-rails (4.0.3)
rails-dom-testing (~> 1.0)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
json (1.8.2)
loofah (2.0.1)
nokogiri (>= 1.5.9)
mail (2.6.3)
mime-types (>= 1.16, < 3)
mime-types (2.4.3)
mini_portile (0.6.2)
minitest (5.5.1)
multi_json (1.10.1)
nokogiri (1.6.6.2-x86-mingw32)
mini_portile (~> 0.6.0)
rack (1.6.0)
rack-test (0.6.3)
rack (>= 1.0)
rails (4.2.0)
actionmailer (= 4.2.0)
actionpack (= 4.2.0)
actionview (= 4.2.0)
activejob (= 4.2.0)
activemodel (= 4.2.0)
activerecord (= 4.2.0)
activesupport (= 4.2.0)
bundler (>= 1.3.0, < 2.0)
railties (= 4.2.0)
sprockets-rails
rails-deprecated_sanitizer (1.0.3)
activesupport (>= 4.2.0.alpha)
rails-dom-testing (1.0.5)
activesupport (>= 4.2.0.beta, < 5.0)
nokogiri (~> 1.6.0)
rails-deprecated_sanitizer (>= 1.0.1)
rails-html-sanitizer (1.0.1)
loofah (~> 2.0)
railties (4.2.0)
actionpack (= 4.2.0)
activesupport (= 4.2.0)
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rake (10.4.2)
rdoc (4.2.0)
json (~> 1.4)
sass (3.4.11)
sass-rails (5.0.1)
railties (>= 4.0.0, < 5.0)
sass (~> 3.1)
sprockets (>= 2.8, < 4.0)
sprockets-rails (>= 2.0, < 4.0)
tilt (~> 1.1)
sdoc (0.4.1)
json (~> 1.7, >= 1.7.7)
rdoc (~> 4.0)
slop (3.6.0)
sprockets (2.12.3)
hike (~> 1.2)
multi_json (~> 1.0)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
sprockets-rails (2.2.4)
actionpack (>= 3.0)
activesupport (>= 3.0)
sprockets (>= 2.8, < 4.0)
sqlite3 (1.3.10-x86-mingw32)
thor (0.19.1)
thread_safe (0.3.4)
tilt (1.4.1)
turbolinks (2.5.3)
coffee-rails
tzinfo (1.2.2)
thread_safe (~> 0.1)
tzinfo-data (1.2015.1)
tzinfo (>= 1.0.0)
uglifier (2.7.0)
execjs (>= 0.3.0)
json (>= 1.8.0)
web-console (2.0.0)
activemodel (~> 4.0)
binding_of_caller (>= 0.7.2)
railties (~> 4.0)
sprockets-rails (>= 2.0, < 4.0)
PLATFORMS
x86-mingw32
DEPENDENCIES
byebug
coffee-rails (~> 4.1.0)
execjs (~> 2.2.2)
jbuilder (~> 2.0)
jquery-rails
rails (= 4.2.0)
sass-rails (~> 5.0)
sdoc (~> 0.4.0)
sqlite3
turbolinks
tzinfo-data
uglifier (>= 1.3.0)
web-console (~> 2.0)
application.rb 文件:
require File.expand_path('../boot', __FILE__)
require 'rails/all'
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module Pinplug
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = 'Central Time (US & Canada)'
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.rb,yml').to_s]
# config.i18n.default_locale = :de
# Do not swallow errors in after_commit/after_rollback callbacks.
config.active_record.raise_in_transactional_callbacks = true
end
end
我还将 turbolinks gem 从 2.3.0 降级到 2.2.2,认为新版本的 turbolinks gem 导致我的应用出现错误;显然这对我不起作用。
关于我的应用可能出现什么问题的任何建议?
【问题讨论】:
Rails-4, ExecJS::ProgramError in Pages#welcome 的可能重复项 在 Rails 5 中它仍然是一个错误 需要更多步骤。一个更熟悉 RoR 的人为我修复了它:还需要将文件重命名如下 application.css.scss 变为 ./app/assets/stylesheets/default.css.scss 和 application.js -> ./app/assets/javascripts /default.js。然后我需要安装 Node.js。最后最后的调整是修改 assets.rb 行 #Rails.application.config.assets.precompile += %w( search.js ) 与 Rails.application.config.assets.precompile += %w( default.js default. css.scss ) 请注意,该行带有需要删除的 # 注释。 Windows 上的快乐 RoRing 【参考方案1】:在您的 /app/views/layouts/application.html.erb 中
第 5 和 6 行,将第一个参数从 application
更改为 default
。
我也遇到了同样的问题
对于我的情况,我不知道为什么,但它只发生在 Windows 上。
参数application
在Web服务器上工作。
【讨论】:
谢谢@FlyC,我很感激!coffee-script source
>= 1.9.0
在 Windows 下无法正常工作。你可以这样做:gem 'coffee-script-source', '1.8.0'
强制1.8.0
然后发出bundle update coffee-script-source
谢谢@MichaelPetch,你的评论对我有用!
将 'application' 更改为 'default' 不会解决问题,如果您检查开发工具,您会看到由于 404 导致资产不包括在内。降级 coffe-script-source 是正确的答案.
我同意@excel66 - 没错,我不敢相信人们实际上会这样做或将这个答案作为一个积极的答案,这真的不是解决方案,因为假设你在这个文件夹中有 CSS 文件\assets\stylesheets 它不会加载它,【参考方案2】:
如果您在 WIndows 中运行,coffee-script-source 1.9.0 无法在 Windows 上运行。
将其更改为以前的版本,将此行添加到您的 Gemfile:
gem 'coffee-script-source', '1.8.0'
然后重新安装捆绑包,调整新 Gem 版本的依赖项:
bundle update coffee-script-source
【讨论】:
另外,重新启动服务器(有点明显,但它抓住了我)。 此解决方案适用于 Windows 10。确保像 Jeff 所说的那样重新启动服务器。 您好,先生,我按照您说的做了.. 还是不行.. 为什么?【参考方案3】:我遇到这个问题已经有一段时间了,并且浏览了这个帖子中的所有答案,发现它们都没有成功,我决定添加我的解决方案,希望它可以帮助未来的 Rails 用户。
我已经在这个线程中完成了所有工作 - 将 application
更改为 default
允许它顺利通过,但是一旦你实际尝试使用任何 JavaScript,就会显示一个关于无法找到的错误default.js
。我已经安装了 NodeJS 并将它放在我的 Ruby/bin 文件夹中。什么都没做,所以我删除了它。
您确实可以暂时通过“用default
切换出application
”解决方案来解决这个问题,但这是非常短期的。如果您不打算通过 Rails 资产管道为您的应用程序设置样式或添加 JavaScript,则此解决方案可能对您有用。我自己没有对此进行测试,但我想在 application.html 头文件中包含 JavaScript 和样式表可能会起作用。但是你会失去 Rails 的魔力。
我在 Windows 8、Windows 10 和 Ubuntu 平台上遇到过这个问题。
对我来说,唯一解决它并且仍然呈现 JavaScript 和样式表的方法是首先将样式表的 application
更改为 application.css
(即使您使用的是 Sass/SCSS,因为它仍然可以编译下来进入 css) 和 application.js
用于 JavaScript 链接。完成后,进入您的/assets/javascripts/application.js
文件并删除//= require turbolinks
前面的//
。
现在您的应用程序应该可以正常工作了。
这可能是 turbolinks 的一个更深层次的问题,但这是一个快速的解决方法,还没有让我失望。
【讨论】:
这个解决方案在 Windows 10 上为我工作,并允许 ruby 看到我在“管道”中拥有的其他样式表。将“应用程序”更改为“默认”——确实破坏了样式表。也许这只是一个咖啡脚本错误的原因 - 但这个解决方案效果很好。 哇;如果可以的话,我会给你+150。太感谢了。这适用于 win 7 x64 我遇到了同样的问题,将“application”更改为“default”会引发找不到“application.css”的异常。但是,这个解决方案确实对我有用。谢谢!【参考方案4】:在 windows 咖啡脚本源 >= 1.9.0 中无法正常工作。 只需添加 Gemfile
gem 'coffee-script-source', '1.8.0'
然后运行
bundle update coffee-script-source
【讨论】:
非常感谢! 这就是解决方案!谢谢! 这是我在 Windows Server 2016 中使用的解决方案【参考方案5】:只需在本地机器上安装 NodeJS(确保将相应条目添加到 PATH 中)并添加
gem 'execjs'
进入Gemfile。
【讨论】:
我没有意识到我的机器上没有安装 NodeJS。我发现这个视频基本上以 youtube.com/watch?reload=9&v=l04kFL3pnEk 相同的方式解决了它,并谈到在 Windows 机器上安装 NodeJS。【参考方案6】:在 Windows 10 版本 1511 上,添加 宝石'咖啡脚本源','1.8.0' 到我的 gemfile 然后 ruby bin\bundle 更新咖啡脚本源 从项目目录工作。 注意:之前被替换的咖啡脚本源版本是 1.10.0
【讨论】:
【参考方案7】:(在 Windows 8 上)
-
安装 Node.js!
将其添加到 PATH (ENV_VAR)
重启服务器
【讨论】:
是什么让您认为这是一个比一年前接受答案更好的解决方案? 我认为这是一个更好的解决方案,因为在 /layouts/application.html.erb 中将“应用程序”更改为“默认”会导致 CSS 和 JS 文件抛出 404。安装 Node.js 不会不需要您对代码进行更改,这些更改要么会产生不希望的结果(脚本和样式表未加载),要么会导致您在迁移到生产环境时必须对代码进行广泛的更改。 也适用于 Windows 10。经过测试【参考方案8】:我也有这个问题。 我进入 Sublime 进入我的项目文件夹。然后单击应用程序文件夹,查看文件夹,布局,单击 application.html.erb 并将第 5 行和第 6 行“应用程序”更改为“默认”。工作得很好。感谢您发布您的问题,并感谢那些回答的人!
我只是想补充一下,我是通过 Sublime 进入的。我只是在学习,我不明白如何访问 .erb 文件。只是想帮助别人。
【讨论】:
【参考方案9】:我刚刚在第 5 行和第 6 行将“application
”更改为“default
”,并解决了。
/app/views/layouts/application.html.erb
.
来自:
<%= stylesheet_link_tag '**application**', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag '**application**', 'data-turbolinks-track' => true %>
到:
<%= stylesheet_link_tag '**default**', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag '**default**', 'data-turbolinks-track' => true %>
【讨论】:
【参考方案10】:终于让它工作了,真是松了一口气。 即使我不确定是什么使它起作用。 尝试了以下所有方法。 1)安装 node.js ,添加 coffescript npm ,然后重新启动。 2) 为 exec.js 添加 gem 并修改 runtime.rb 使其无法使用默认的 windows 脚本文件。 请参阅此链接以了解如何执行此操作: [https://github.com/sstephenson/execjs/issues/81][1] 3)为了安全起见,还添加了rubyracer gem gem 'therubyracer',平台::ruby
总的来说添加了两个脚本引擎,nodejs 和 rubyracer 并添加了 execjs 以便它选择最好的脚本引擎,但无法选择 windows 脚本引擎。
我想在添加 execjs 之后单独安装 nodejs 可能会起作用。但是我没有重新启动(安装 nodejs 后)并尝试了所有其他的东西。
【讨论】:
【参考方案11】:我尝试了上述所有解决方案,唯一正常工作的是安装 node.js,将目录添加到 windows 中的“路径”环境变量(在高级系统设置、环境变量、路径中找到)和然后重新启动计算机和服务器。 我认为咖啡脚本源的更高版本必须依赖于 node.js,以及其他 gem。在不使用咖啡脚本源的情况下,我遇到了同样的错误。
将“应用程序”更改为“默认”是一个糟糕的解决方案,因为它只是删除了应用程序的所有 css 样式。我完全不推荐它。
【讨论】:
这对我有用..对于我来说,节点已经安装,但它不包括在环境路径变量中..所以我只是将它添加到路径变量中.. ..就是这样【参考方案12】:turbolinks gem 的问题,所以它的创建错误
所以在 app\views\layouts\application.html.erb 中改变这个
<%= stylesheet_link_tag 'application.css', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application.js', 'data-turbolinks-track': 'reload' %>
来自
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
并取消注释 app\assets\javascripts\application.js 中的第 15 行
require turbolinks
并将其复制到文件末尾的 app\assets\stylesheets\application.css 中
从此你的 css 和 js 将运行
【讨论】:
【参考方案13】:我在 Rails 5.1.6 上。我遇到过同样的问题。按照上面的建议,我降级了解决问题的 coffee-script-source gem。
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2' # <-- This existed already
gem 'coffee-script-source', '1.8.0' # <-- Adding this line solved the problem
注意:我没有修改 application.html.rb 文件
【讨论】:
【参考方案14】:我们应该只将 /app/views/layouts/application.html.erb 中的第 6 行从 application
更改为 default
。更改第 5 行将导致样式表无法加载。
【讨论】:
【参考方案15】:您需要阅读 rails 页面中的说明。你需要 ExecJS gem 和一些 JS 运行时。
更实用: 1.- 安装一些Runtime JS,例如node.js
2.- 获取 ExecJS gem-> gem install execjs
说明:
来自 rails 页面:
“编译 CoffeeScript 和 JavaScript 资产压缩需要您的系统上有可用的 JavaScript 运行时,如果没有运行时,您将在资产编译期间看到 execjs 错误。通常 Mac OS X 和 Windows 都安装了 JavaScript 运行时。 Rails 将 therubyracer gem 添加到新应用程序的注释行中生成的 Gemfile 中,如果需要,您可以取消注释。therubyrhino 是 JRuby 用户推荐的运行时,默认添加到 JRuby 下生成的应用程序中的 Gemfile 中。您可以调查ExecJS 支持的所有运行时。”
来自 ExecJS 的 hte gitHub:
“ExecJS 让您可以从 Ruby 运行 JavaScript 代码。它会自动选择可用的最佳运行时来评估您的 JavaScript 程序,然后将结果作为 Ruby 对象返回给您。
ExecJS 支持这些运行时:
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"
ExecJS Readme GitHub
【讨论】:
【参考方案16】:在 Windwos 10
只需安装node.js 并确保节点可执行文件位于路径变量中。
【讨论】:
【参考方案17】:(在 Windows 10 - Rails 4.2.5 上):我通过这样做解决了:
1) 安装nodes.js
2) 安装 coffe-script-source gem
gem 'coffee-script-source', '1.8.0'
3) 在“config\initializers\assets.rb”中添加这一行
Rails.application.config.assets.precompile + =% w (application.css)
【讨论】:
【参考方案18】:对于 Windows 用户您可以设置 execjs 运行时路径到 Node
config/boot.rb
ENV['EXECJS_RUNTIME'] = 'Node'
【讨论】:
以上是关于Pages#home 中的 Rails ExecJS::ProgramError?的主要内容,如果未能解决你的问题,请参考以下文章
Rails匹配? attribute_missing(match,* args,&block):在StaticPagesController #home中的super,NoMethodError(代码