web-dev-qa-db-fra.com

Rails ExecJS :: ProgramError dans Pages # home?

En démarrant une nouvelle application, lorsque je crée une page d'accueil de contrôleur et que j'essaie d'accéder à l'hôte local: 3000/pages/home, le message d'erreur suivant s'affiche:

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)

fichier 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>

fichier 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

fichier pages_controller.rb:

class PagesController < ApplicationController
  def home
  end
end

fichier 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

gemfile:

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]

fichier 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)

fichier 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

J'ai également abaissé la valeur de la gem turbolinks de la version 2.3.0 à la version 2.2.2, pensant que la version plus récente de la gem turbolinks provoquait des erreurs dans mon application; évidemment cela n'a pas fonctionné pour moi.

Des suggestions sur ce qui pourrait mal se passer avec mon application?

65
AB10

Dans vos /app/views/layouts/application.html.erb Lines 5 et 6 , changez le premier paramètre de application à default.

J'ai rencontré le même problème aussi Pour ma situation, je ne sais pas pourquoi, mais cela ne se produit que sous Windows . Le paramètre application fonctionne sur le serveur Web.

141
FlyC

Si vous utilisez Windows, Coffee-Script-Source 1.9.0 ne fonctionne pas sur Windows.

Remplacez-la par une version précédente en ajoutant cette ligne à votre Gemfile:

gem 'coffee-script-source', '1.8.0'

Puis réinstallez le paquet en ajustant les dépendances pour la nouvelle version de Gem avec:

bundle update coffee-script-source
59
evedovelli

Cela fait un moment que je suis confronté à ce problème. Après avoir passé en revue toutes les réponses de ce fil de discussion et les avoir toutes trouvées infructueuses, j'ai décidé d'ajouter ma solution dans l'espoir d'aider les futurs utilisateurs de Rails. 

J'ai tout fait dans ce fil - changer application en default lui permet de passer sans erreur, mais une fois que vous avez réellement essayé d'utiliser du JavaScript, une erreur s'affiche pour vous empêcher de trouver default.js. J'ai installé NodeJS et l'ai mis dans mon dossier Ruby/bin. Cela n'a rien fait, alors je l'ai enlevé.

Vous pouvez en effet temporairement contourner ce problème avec la solution "changer de application avec default", mais c'est extrêmement court terme. Cette solution peut fonctionner pour vous si vous n'avez pas l'intention de créer un style ou d'ajouter du JavaScript à votre application via le pipeline d'actifs Rails. Je n'ai pas testé cela moi-même, mais j'imagine que l'inclusion de JavaScript et de feuilles de style dans le fichier d'en-tête application.html peut fonctionner. Mais alors vous perdez la magie de Rails.

J'ai eu ce problème sur Windows 8, Windows 10 et les plateformes Ubuntu. 

La seule chose qui résout, pour moi, et restitue toujours le code JavaScript et les feuilles de style est de changer d'abord application en application.css pour les feuilles de style (même si vous utilisez Sass/SCSS, car il est toujours compilé en css) et application.js pour le Lien JavaScript. Une fois que cela est fait, allez dans votre fichier /assets/javascripts/application.js et supprimez le // devant //= require turbolinks.

Et maintenant, votre application devrait bien fonctionner. 

Il s’agit probablement d’un problème plus profond lié aux turbolinks, mais c’est une solution rapide qui ne m’a pas encore laissé tomber.

24
MK McKenzie

dans windows coffee-script source> = 1.9.0 ne fonctionne pas correctement. il suffit d’ajouter dans Gemfile

 gem 'coffee-script-source', '1.8.0'

et courir

bundle update coffee-script-source
19
Thorin

Il suffit d’installer NodeJS sur votre machine locale (assurez-vous que l’entrée correspondante est ajoutée à PATH) et ajoutez

gem 'execjs'

dans le Gemfile .

6
Ilya Bodrov-Krukowski

(Sous Windows 8)

  1. Installez Node.js!
  2. Ajoutez-le à la PATH (ENV_VAR)
  3. redémarrer le serveur
5
adhix11

Sur Windows 10 version 1511, en ajoutant gem 'coffee-script-source', '1.8.0' dans mon fichier gem, puis Ruby bin\mise à jour du paquet coffee-script-source Du répertoire du projet a fonctionné .. NB: la version précédente de coffee-script-source qui avait été remplacée était 1.10.0.

5
Paul Leach

J'ai eu ce problème aussi ... Je suis entré dans Sublime dans mon dossier de projet. Cliquez ensuite sur les dossiers de l'application, le dossier de vue, la mise en page, sur application.html.erb et modifiez les lignes 5 et 6 "application" en "défaut". A bien fonctionné. Merci d'avoir posté votre problème et merci à ceux qui ont répondu! 

Je voulais juste ajouter que je suis passé par Sublime. Je viens d'apprendre et je ne comprenais pas comment accéder au fichier .erb. Je voulais juste aider les autres.

3
dmers

Enfin réussi à fonctionner, quel soupir de soulagement ... Même si je ne suis pas tout à fait sûr de ce qui a motivé son travail ... a essayé toutes les solutions suivantes ... 1.) Installé node.js, ajouté le coffescript npm, et redémarré . 2) Gem ajouté pour exec.js et modifié runtime.rb afin qu’il ne puisse pas utiliser le fichier de script Windows par défaut . Reportez-vous à ce lien pour savoir comment procéder: [ https://github.com/sstephenson/execjs/issues/81][1] 3) Pour votre sécurité, a également ajouté la gemme rubyracer gem 'therubyracer', plateformes:: Ruby

En résumé, deux moteurs de script, nodejs et rubyracer, ont été ajoutés, et execjs a été choisi de manière à ce qu'il choisisse le meilleur moteur de script, mais ne soit pas en mesure de choisir le moteur de lecture de fenêtres.

Je suppose que la seule installation de nodejs aurait pu fonctionner après l’ajout de execjs. Cependant, je n'ai pas redémarré (après l'installation de nodejs) et essayé toutes les autres choses.

1
Rpant

J'ai essayé toutes les solutions ci-dessus, et la seule qui a fonctionné correctement a été d'installer node.js, d'ajouter le répertoire à la variable d'environnement 'path' de Windows (dans Paramètres système avancés, Variables d'environnement, chemin), puis de redémarrer le ordinateur et serveur ... Je pense que les versions ultérieures de coffee-script-source doivent dépendre de node.js, ainsi que d’autres gemmes. J'ai eu l'erreur identique sans utiliser coffee-script-source. 

Changer le mot "application" en "défaut" est une solution terrible, car cela supprime tout le style CSS de l'application. Je ne le recommande pas du tout.

1
Graeme Campbell

Je viens de changer le 'application' en 'default' aux lignes 5 et 6 et j'ai résolu le problème ./app/views/layouts/application.html.erb.

DE:

<%= 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 %>
1
Carlos Amorim

(Sous Windows 10 - Rails 4.2.5): J'ai résolu ceci en procédant comme suit:

1) Installez - nodes.js 

2) Installez le gem coffe-script-source

gem 'coffee-script-source', '1.8.0'

3) Ajoutez cette ligne dans "config\initializers\assets.rb"

Rails.application.config.assets.precompile + =% w (application.css)
0
Isa Souza

nous devrions uniquement modifier la ligne 6 de application à default dans /app/views/layouts/application.html.erb. Si vous modifiez la ligne 5, les feuilles de style ne se chargeront pas.

0
BENS

Pour les utilisateurs Windows Vous pouvez configurer le chemin d'exécution de execjs vers le nœud

config/boot.rb

ENV['EXECJS_RUNTIME'] = 'Node'
0
riguang zheng

Vous devez lire les instructions dans la page Rails. Vous avez besoin de la gemme ExecJS et d’un runtime JS.

Plus pratique: 1.- Installez du JS Runtime, par exemple node.js

2.- obtenir le gem ExecJS -> gem installer execjs

Explication:

Depuis la page Rails:

"Pour compiler les ressources CoffeeScript et JavaScript, vous devez disposer d’un runtime JavaScript sur votre système. En l’absence de runtime, vous verrez une erreur execjs lors de la compilation. therubyracer gem au fichier Gemfile généré dans une ligne commentée pour les nouvelles applications et vous pouvez supprimer le commentaire si vous en avez besoin. runtimes à ExecJS ".

De la part de gitHub d'ExecJS:

"ExecJS vous permet d'exécuter du code JavaScript à partir de Ruby. Il sélectionne automatiquement le meilleur runtime disponible pour évaluer votre programme JavaScript, puis vous renvoie le résultat sous forme d'objet Ruby.

ExecJS supporte ces 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" 

Lisezmoi ExecJS GitHub

0
Mauro

Je suis sur Rails 5.1.6. J'ai eu le même problème. Comme recommandé ci-dessus, j'ai dégradé la gemme coffee-script-source qui a résolu le problème.

# 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

Remarque: je n'ai pas modifié le fichier application.html.rb.

0
Kaz

Sur Windows 10 

Installez simplement node.js et assurez-vous que l’exécutable du noeud est dans la variable chemin.

0
Rafaf Tahsin

Son problème avec turbolinks gem donc son erreur de création 

Donc, dans app\views\layouts\application.html.erb, changez ceci

<%= stylesheet_link_tag    'application.css', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application.js', 'data-turbolinks-track': 'reload' %>

de 

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

et décommentez la ligne n ° 15 dans app\assets\javascripts\application.js 

require turbolinks

et copiez-le dans app\assets\stylesheets\application.css à la fin du fichier

A partir de là vos css et js seront lancés

0
Arpit bandil