gpt4 book ai didi

ruby-on-rails - Rails/Passenger/Node.js : ExecJS "Could not find a JavaScript runtime"

转载 作者:IT老高 更新时间:2023-10-28 23:09:14 29 4
gpt4 key购买 nike

我正在尝试使用 Node.js 作为我的 Rails 应用程序的 JavaScript 运行时。我在 Ubuntu 12.0.4 上使用 Phusion Passenger 模块和 Nginx 作为我的 Web 服务器。每次我访问我的 Rails 应用程序时,我都会收到一个错误页面,该页面似乎是从 Passenger 生成的,指出 ExecJS 找不到 JavaScript 运行时。我在这里看到很多帖子,要么建议你安装 Node——我通过 sudo apt-get install node 完成——要么建议在你的 Gemfile 中使用 therubyracer + execjs。后一种解决方案确实有效,但我更喜欢使用 Node,尤其是 Heroku has stated他们不鼓励使用 therubyracer 是因为它使用“非常大量的内存”。

我遇到了 tutorial这表明我的 Web 服务器运行的用户可能在其路径中没有 Node。我通过运行 sudo -u www-data which node 进行了检查,它返回 /usr/bin/node。用户 www-data 是运行 nginx 的用户,也是拥有我的 Rails 应用程序中所有文件的用户。我还查看了 /etc/environment,我可以看到 /usr/bin 在系统范围的路径中。运行 sudo -u www-data node -v 也会按预期返回 Node 版本,因此它是可执行的。

当我运行 RAILS_ENV=production bundle exec rake assets:precompile 时,我没有收到任何错误。当我将 ExecJS 加载到与 IRB 的交互式 session 中时,我能够让它返回一个有效的运行时。我也尝试过明确添加 EXECJS_RUNTIME=Node 作为环境变量,但它只是说“Node.js(V8)运行时不可用”。我已经尝试了很多东西,但我无法让它工作!

这是我在访问我的 Rails 应用程序时遇到的错误。当我查看 Nginx 日志文件时,我看到的内容几乎相同。

Web application could not be started

Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
/usr/lib/ruby/gems/2.1.0/gems/execjs-2.0.2/lib/execjs/runtimes.rb:51:in `autodetect'
/usr/lib/ruby/gems/2.1.0/gems/execjs-2.0.2/lib/execjs.rb:5:in `<module:ExecJS>'
/usr/lib/ruby/gems/2.1.0/gems/execjs-2.0.2/lib/execjs.rb:4:in `<top (required)>'
/usr/lib/ruby/gems/2.1.0/gems/uglifier-2.5.0/lib/uglifier.rb:3:in `require'
/usr/lib/ruby/gems/2.1.0/gems/uglifier-2.5.0/lib/uglifier.rb:3:in `<top (required)>'
/usr/lib/ruby/gems/2.1.0/gems/bundler-1.6.1/lib/bundler/runtime.rb:76:in `require'
/usr/lib/ruby/gems/2.1.0/gems/bundler-1.6.1/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
/usr/lib/ruby/gems/2.1.0/gems/bundler-1.6.1/lib/bundler/runtime.rb:72:in `each'
/usr/lib/ruby/gems/2.1.0/gems/bundler-1.6.1/lib/bundler/runtime.rb:72:in `block in require'
/usr/lib/ruby/gems/2.1.0/gems/bundler-1.6.1/lib/bundler/runtime.rb:61:in `each'
/usr/lib/ruby/gems/2.1.0/gems/bundler-1.6.1/lib/bundler/runtime.rb:61:in `require'
/usr/lib/ruby/gems/2.1.0/gems/bundler-1.6.1/lib/bundler.rb:132:in `require'
/srv/www/app/config/application.rb:7:in `<top (required)>'
/srv/www/app/config/environment.rb:2:in `require'
/srv/www/app/config/environment.rb:2:in `<top (required)>'
config.ru:3:in `require'
config.ru:3:in `block in <main>'
/usr/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `instance_eval'
/usr/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `initialize'
config.ru:1:in `new'
config.ru:1:in `<main>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:112:in `eval'
/usr/share/passenger/helper-scripts/rack-preloader.rb:112:in `preload_app'
/usr/share/passenger/helper-scripts/rack-preloader.rb:158:in `<module:App>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:28:in `<main>'

最佳答案

我也有这个问题。这就是为我解决的问题。我将此添加到我的 nginx.conf 的顶部

env PATH;

http://wiki.nginx.org/CoreModule#env

当我专注于这个解决方案时,我还发现这篇文章帮助我开始找到正确的树:https://forums.freebsd.org/viewtopic.php?&t=35539 -- 他编辑了 execjs 代码以给出 Node 的绝对路径。这很有效,并帮助我了解了如何为乘客提供路径。

关于ruby-on-rails - Rails/Passenger/Node.js : ExecJS "Could not find a JavaScript runtime",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23124776/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com