对象不支持此属性或方法 Rails Windows 64bit

IT技术 javascript ruby-on-rails
2021-01-15 01:06:38

我在 Surface Pro 3 上安装了 Rails,并在尝试查看页面后遇到此错误。我尝试了一些建议,例如使用 libv8 安装 ruby​​racer,但没有帮助。

类型错误:对象不支持此属性或方法(在 c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/turbolinks-2.5.3/lib/assets/javascripts/turbolinks.js.咖啡)

这是我的 gemfile:

source 'http://rubygems.org'


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.1.8'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.3'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
gem 'therubyracer',  platforms: :ruby
# 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
gem 'libv8', '~> 3.16.14.7'

# 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

# Use debugger
# gem 'debugger', group: [:development, :test]

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin]
gem 'twitter-bootstrap-rails', :git => 'git://github.com/seyhunak/twitter-bootstrap-rails.git'
gem 'font-awesome-rails'
gem 'simple_form'
gem 'devise'
5个回答

Coffee 脚本 1.9.0 不能很好地与 Windows 配合使用。在我的 Windows 7 机器上,使用 1.8.0 版解决了这个问题。

添加到 Gemfile

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

然后,运行

bundle update coffee-script-source

并重新启动服务器(如果需要)

如果这解决了上述问题的问题,则需要选择答案作为正确答案。这也对我有用。谢谢你。
2021-03-16 01:06:38
注意:如果bundle update ...不起作用,由于找不到命令错误,则您需要先通过调用安装捆绑程序:gem install bundler. . . . 注2:用于安装调用“bundleR”,在词尾加上R。用于使用最后没有 R 的调用“bundle”。
2021-03-17 01:06:38
谢谢你帮我修好了(没有修改runtimes.rb
2021-03-20 01:06:38
强制coffee-script-source到1.8.0完美地为我工作,Rails的4.1.1,coffee-script2.3.0,coffee-rails4.0.1
2021-04-06 01:06:38
@RichPeck 同意。迟早我们需要更新咖啡脚本,和/或依赖于它的东西。发生这种情况时,我会尽量更新此答案。
2021-04-08 01:06:38

有同样的问题(对所有事情都做一个“hello world”应用程序......)但无法使 coffeescript 1.8.0 修复工作。在这里找到了解决方案:http : //mech.xyz/how-to-fix-ruby-on-rails-turbolinks-js-coffee-error-windows/

脚步:

  1. 导航到 \app\views\layouts\application.html.erb
  2. 将第 6 行从

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>

<%= javascript_include_tag '**defaults**', 'data-turbolinks-track' => true %>

这样做了,现在工作正常。

这会导致js在加载coffeescript之前抛出错误......不是一个真正的解决方案
2021-03-16 01:06:38
就我而言,它在app\views\shared\backend\_javascripts.html.erb和 中app\views\shared\_javascripts.html.erb但它只让我到此为止;然后我开始看到空白页。
2021-03-23 01:06:38
它在“hello world”应用程序中对我有用,但在真正的应用程序中无效。似乎 turbolinks 不能以这种方式正常工作。
2021-03-24 01:06:38

与流行的看法相反,Rails 并不像他们声称的那样跨平台兼容。如果是这样,它可以在 Windows 上运行,开箱即用。像你一样,我已经尝试了所有可用的选项。

这是使用 Ruby 2.1.5p273/Rails 4.2.0 解决的

我将 execjs 更改为在 jscript 中使用 UTF-8,没有效果。这是通过编辑C:\RailsInstaller\Ruby2.1.0\lib\ruby\gems\2.1.0\gems\execjs-2.2.2\lib\execjs\runtimes.rb将 JScript = 块更改为以下内容来完成的。

JScript = ExternalRuntime.new(
  name:        "JScript",
  command:     "cscript //E:jscript //Nologo",
  runner_path: ExecJS.root + "/support/jscript_runner.js",
  encoding:    'UTF-8' # CScript with //U returns UTF-16LE
)

我还尝试安装 therubyracer,这导致 libv8 依赖项无法编译。我将我的 python 2.7 安装添加到 Windows 系统路径,并安装了 libv8。然后它说安装了 libv8,但是当我尝试安装 therubyracer 时,它说找不到 libv8。我卸载了 libv8 并再次尝试,它说无法编译 libv8。这足以让我确定 therubyracer 不能在 Windows 上运行,所以我将它从 Gemfile 中注释掉,将 python 2.7 留在我的 Windows 系统路径上。

我更新了 coffee-script-source,将以下内容添加到我的 Gemfile 中

gem 'coffee-script-source', '1.9.0'

将 coffee-script-source 添加到我的 Gemfile 后,我运行了gem update coffee-script-source,这也没有解决问题。

然后我安装了 node.js,这工作了 5 分钟,直到我生成了一个新的控制器,它又坏了。

注意:安装 node.js 后,您需要打开一个新的命令提示符以获取安装 node.js 时设置的系统路径的更新。

最后解决这个问题的是打开app\assets\javascripts\application.js文件并删除最后一行

//= require_tree .

最后运行以下命令以确保在 Node.js 中正确安装了 coffee-script

npm install -g coffee-script
正如这个答案中所建议的,我还安装了 node.js 并将 python (2.7) 添加到我的系统路径中。这些步骤可能会起作用,但我也只是使用 railsinstaller 安装了 ruby​​,尽管我最终安装了 Ruby 2.1.0。
2021-03-14 01:06:38
@Matt,我能够通过运行 npm install -g coffee-script 将“//= require_tree .”恢复到 application.js,让我知道这是否解决了您的问题。
2021-03-14 01:06:38
我忘了提到将 gem 'coffee-script-source', '1.9.0' 添加到我的 gemfile 中,但我不确定是否对 coffee-script-source 进行了 gem 更新,这也可能对结果产生影响. 我真的尝试了我能找到的一切。
2021-03-17 01:06:38
这是使用 ruby​​installer.org 安装的。我摆脱了树线,它仍然发生。太令人沮丧了!
2021-03-23 01:06:38
真相:“与流行的看法相反,Rails 并不像他们声称的那样跨平台兼容。如果是这样,它就可以在 Windows 上运行,开箱即用。”
2021-04-05 01:06:38

这是由 64 位 Windows 和 CoffeeScript gem 之间的不兼容造成的。

这确实是一个 CoffeeScript 问题。它似乎只影响 64 位 Windows 机器。32 位 Windows 没问题。

在 Rails 中,CoffeeScript 默认出现在两个地方:

  • 默认脚手架生成器生成一个咖啡脚本文件。
  • Turbolinks 是 CoffeeScript。

解决此问题的最简单方法是简单地删除 CoffeeScript。反正你可能不需要它。

  1. 删除 app/assets/javascripts 中生成的 coffeeScript 文件。
  2. 从 gemfile 中删除 turbolinks gem,然后捆绑安装。
  3. 编辑 assets/stylesheets/application.js 以删除 turbolinks include。

我发现你的错误看起来像 Windows 上的 ExecJS::RuntimeError 试图遵循 ruby​​tutorial

我通过取消注释“assets\javascripts\application.js”中的行 // = require_tree 来修复我的系统

= require_tree
这会导致js在加载coffeescript之前抛出错误......不是一个真正的解决方案
2021-04-01 01:06:38