我尝试重新启动服务器时遇到错误.我不知道如何解决这个问题.
deploy@user:~$ sudo nginx -s reload
nginx: [emerg] unknown directive "passenger_root" in /etc/nginx/nginx.conf:66
Run Code Online (Sandbox Code Playgroud)
我将这些行添加到nginx配置文件'/etc/nginx/nginx.conf'
passenger_root /home/deploy/.rvm/gems/ruby-2.0.0-p353/gems/passenger-4.0.37;
passenger_ruby /home/deploy/.rvm/gems/ruby-2.0.0-p353/wrappers/ruby;
Run Code Online (Sandbox Code Playgroud) 我正在尝试将Node.js用作我的Rails应用程序的JavaScript运行时.我在Ubuntu 12.0.4上使用带有Nginx的Phusion Passenger模块作为我的Web服务器.每次我访问我的Rails应用程序时,我都会看到一个错误页面,该页面似乎是从Passenger生成的,表明ExecJS无法找到JavaScript运行时.我在这里看过很多帖子,或者建议你安装Node - 我已经完成了 - sudo apt-get install node或建议在你的Gemfile中使用therubyracer + execjs.后一个解决方案实际上确实有效,但我更喜欢使用Node,特别是因为Heroku 已经声明他们不鼓励使用therubyracer,因为它使用了"非常大量的内存".
我遇到了一个教程,建议我的web服务器运行的用户可能没有Node的路径.我通过跑步检查了sudo -u www-data which node它,然后它返回/usr/bin/node.用户www-data是nginx运行的用户,以及拥有我的Rails应用程序中所有文件的用户.我也看过了/etc/environment,我可以看到这/usr/bin是在系统范围内的路径.Running sudo -u www-data node -v也按预期返回Node版本,因此它是可执行的.
当我跑步时,RAILS_ENV=production bundle exec rake assets:precompile我没有任何错误.当我将ExecJS加载到与IRB的交互式会话中时,我能够让它返回一个有效的运行时.我也试过显式添加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 …Run Code Online (Sandbox Code Playgroud)