我通过从root用户编译和安装来安装node.js.我想这可能是挂断的地方。从运行rails app的用户我检查了node.js。
$ which node
/usr/local/bin/node
当我启动我的rails应用程序(Rails 3.2.9)时,我得到普遍无益的“我们很抱歉,但出了点问题。”检查生产错误日志我发现找不到Javascript运行时。这显然是安装的,这令人困惑。所以我开始强制使用Node javascript运行时。我编辑了config / boot.rb以包含:
ENV['EXECJS_RUNTIME'] = 'Node'
我在观看制作日志的同时再次检查了我的应用。这次我收到了错误
ActionView::Template::Error (Node.js (V8) runtime is not available on this system
仍然困惑。我去了execjs gem并将运行时命令更改为确切的安装路径。
Node = ExternalRuntime.new(
:name => "Node.js (V8)",
:command => "/usr/local/bin/node",
:runner_path => ExecJS.root + "/support/node_runner.js",
:encoding => 'UTF-8'
)
我仍然得到同样的错误。节点已安装并可由用户访问,但gem / rails似乎无法使用它。 服务器运行CentOS 6.3。导致错误被抛出的特定javascript文件是jquery.nivo.slider.pack.js。从nivo下载后我没有编辑。
答案 0 :(得分:5)
所以,我使用带有Passenger的Apache2在CentOS 5.10上安装了Ruby 2.0.0和Rails 4.0.2。我尝试的第一步是打开rails控制台并输入以下命令:
ExecJS.runtime
它返回以下值:
#< ExecJS :: ExternalRuntime:0x99ab380 @name =" Node.js(V8)",@ command = [" nodejs"," node&#34 ],@ runner_path =" /home/foo/vendor/bundle/ruby/2.0.0/gems/execjs-2.1.0 /lib/execjs/support/node_runner.js" ;, @encoding =" UTF-8",@ deprecated = false,@ binary =" node">
这意味着该节点确实已安装并检测到,但由于某种原因它无法正常工作。
所以,我在网站上尝试了这个例子:
ExecJS.eval("'red yellow blue'.split(' ')")
我收到了正确答案。所以,现在我想知道为什么乘客不会捡到它。
然后,我注意到乘客显示路径变量,它看起来像:
/home/foo/vendor/bundle/ruby/2.0.0/bin:/usr/local/rvm/gems/ruby-2.0.0-p481/bin:/usr/local/rvm/gems/ruby- 2.0.0-p481@global/bin:/usr/local/rvm/rubies/ruby-2.0.0-p481/bin:在/ usr / Kerberos的/ bin中:/ sbin目录:/ usr / sbin目录:/ bin中:在/ usr /箱:在/ usr /本地/ RVM / bin中:/家庭/富/ bin中
但是,似乎缺少usr/local/bin
。我不是Linux上的专家,所以对我来说,解决这个问题的最简单方法是使用符号链接。所以,我执行ln -s /usr/local/bin/node /usr/bin/node
。您可能需要注意我使用命令find / -name node
找到了我的nodejs的路径。
然后我刷新了我的网络应用程序,你不知道它有效。所以,如果它对我有用,我希望它可以帮助其他人。
更新(可能更好的方式):这可能是一种更好的方法。我们可以像这样从源代码编译它:
mkdir ~/install
cd ~/install
wget https://nodejs.org/dist/v7.2.1/node-v7.2.1.tar.gz
tar xvf node-v7.2.1.tar.gz
cd node-v7.2.1
./configure --prefix=/usr/
make && make install
这样Node.js将安装在Passenger期望的路径中。
答案 1 :(得分:1)
我在centos 6.3系统上安装了带有source的nodejs时遇到了类似的问题。它已成功安装,但我一直未能编译我的ror app资产,直到我明确将PATH设置为安装位置(nodejs)
[root] #make install
...
安装/usr/local/lib/node_modules/npm/html/doc/folders.html
符号链接../lib/node_modules/npm/bin/npm-cli.js - >在/ usr / local / bin目录/ NPM
将/ usr / local / bin / npm的shebang更新为/ usr / local / bin / node
[root] #export PATH = / usr / local / bin:$ PATH
现在它有效。希望有所帮助!
答案 2 :(得分:0)
我不知道这是否有帮助但是检查那个节点在那里的$ PATH。此外,如果要使用节点,则应使用rvm。检查您的节点安装是否正确完成。