我正在尝试使用Mongoid / Devise Rails 3.1 template( Mongoid 和 Devise ),并且我一直收到错误说明ExecJS无法找到JavaScript运行时。当我没有安装任何内容时,我已经尝试安装了Node.js,Mustang和Ruby Racer,但没有任何效果。
我找不到JavaScript运行时。请参阅sstephenson/ExecJS(GitHub)以获取可用运行时列表(ExecJS::RuntimeUnavailable
)。
我需要做些什么来实现这个目标?
答案 0 :(得分:446)
答案 1 :(得分:422)
我在使用Ubuntu 11.04并遇到类似问题。 Installing Node.js修正了它。
从Ubuntu 13.04 x64开始,你只需要运行:
sudo apt-get install nodejs
这将解决问题。
sudo yum install nodejs
答案 2 :(得分:76)
在你的Gem文件中,写下
gem 'execjs'
gem 'therubyracer'
然后运行
bundle install
一切都适合我:)
答案 3 :(得分:47)
我遇到了类似的问题:我的Rails 3.1应用程序在Windows上工作正常,但在Linux上运行时却出现与OP相同的错误。在两个平台上对我有用的修复是将以下内容添加到我的Gemfile
:
gem 'therubyracer', :platforms => :ruby
诀窍是知道:platforms => :ruby
实际上意味着只使用这个宝石“C Ruby(MRI)或Rubinius,但不是Windows。”
:platforms
中描述了execjs
的其他可能值。
仅供参考:Windows有一个therubyracer
可以找到的内置JavaScript引擎。在Linux上虽然有几个可用的安装,但没有内置。 execjs
就是其中之一。其他人列在{{1}} the bundler
man page。
答案 4 :(得分:36)
将以下gem添加到我的Gemfile中解决了这个问题:
gem 'therubyracer'
然后捆绑新的依赖项:
$ bundle install
答案 5 :(得分:16)
另一种方法是在没有包含你没有的东西的宝石组的情况下捆绑。
所以:
bundle install --without assets
你根本不需要修改Gemfile,当然你提供的不是资产链的东西 - 通常适用于非开发环境。 Bundle将记住.bundle / config文件中的'--without'设置。
答案 6 :(得分:6)
在宝石文件中添加以下宝石
gem 'therubyracer'
gem 'execjs'
并运行
bundle install
你完成了:)
答案 7 :(得分:5)
对于amazon linux(AMI):
public void OpenSpeaker() {
try {
if (!audioManager.isSpeakerphoneOn()) {
audioManager.setSpeakerphoneOn(true);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void CloseSpeaker() {
try {
if (audioManager != null) {
if (audioManager.isSpeakerphoneOn()) {
audioManager.setSpeakerphoneOn(false);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
答案 8 :(得分:4)
我曾经将Ruby Racer添加到Gem文件中来修复它。但是,嘿,Node.js有效!
答案 9 :(得分:4)
我有同样的错误,但仅限于我的登台服务器,而不是我的生产环境。 nodejs已经安装在两个环境中。
输入:
(Int,Int)
我发现node命令位于:/ usr / bin / node上 但是:/ usr / local / bin / node in staging。
在登台时创建符号链接,即:
which node
然后应用程序在分段中工作。
没有大惊小怪。
答案 10 :(得分:3)
不要使用RubyRacer因为内存不好。按照一些人的建议安装Node.js是一个更好的主意。
ExecJs Library可以使用的可用运行时列表也记录了Node.js的使用
https://github.com/sstephenson/execjs
因此,与使用RubyRacer相比,Node.js并不是一种矫枉过正的解决方案。
答案 11 :(得分:2)
仅供参考,这解决了我的问题...这是一个路径问题: http://forums.freebsd.org/showthread.php?t=35539
答案 12 :(得分:0)
当我开始在Ruby 1.9.3中使用rbenv时,我开始遇到这个问题,因为我的系统ruby是1.8.7。 gem安装在两个地方,但由于某种原因,rails脚本没有拿起它。但是将“execjs”和“therubyracer”添加到Gemfile就可以了。
答案 13 :(得分:0)
在你的宝石文件中 取消注释这一行。
19#gem'therubyracer',平台:: ruby
然后跑 捆绑安装
你准备工作了。 :)
答案 14 :(得分:0)
尝试使用Ubuntu 18.04,Ruby 2.6。*,Rails 5和RubyMine 2019.1.1在RubyMine中进行调试,我遇到了同样的问题。
要解决此问题,我取消了mini_racer
中Gemfile
行的注释,然后运行bundle
:
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'mini_racer', platforms: :ruby
更改为:
# See https://github.com/rails/execjs#readme for more supported runtimes
gem 'mini_racer', platforms: :ruby
答案 15 :(得分:0)
我通过nvm安装了node
,在使用Capistrano进行部署时遇到了此问题。 Capistrano不会自动加载nvm,因为它非交互式运行。
要解决此问题,只需将nvm添加到~/.bashrc
的行向上移动。该文件将如下所示:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac