Node.js没有被Rails / execjsfind

我通过编译并安装了root用户来安装node.js。 我想这可能是挂断的地方。 从运行rails应用程序的用户,我检查了node.js.

$ which node /usr/local/bin/node 

当我启动我的Rails应用程序(Rails 3.2.9)时,我得到了普遍无用的“我们很抱歉,但出了问题。 检查生产错误日志我看到没有findJavascript运行时。 这很明显,因为它明显安装。 所以我去强制节点JavaScript运行时。 我编辑config / boot.rb包括:

 ENV['EXECJS_RUNTIME'] = 'Node' 

我再次查看我的应用程序,同时看着生产日志。 这一次我得到了错误

 ActionView::Template::Error (Node.js (V8) runtime is not available on this system 

仍然困惑。 我去了execjs的gem,并将运行时命令更改为确切的安装path。

 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下载后我没有编辑。

在我的centos 6.3系统上,我有类似的问题安装nodejs与源代码。 它已经成功安装了,但是我一直在编译我的ror应用程序资产失败,直到我明确地将PATH设置为它的安装位置(nodejs)

[root]#make install

安装/usr/local/lib/node_modules/npm/html/doc/folders.html
symlinking ../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

现在起作用了。 希望有所帮助!

所以,我在CentOS 5.10上安装了Ruby 2.0.0,而Rails 4.0.2在Passenger上使用了Apache2。 我尝试的第一步是打开rails控制台并input以下命令:

 ExecJS.runtime 

它返回以下值:

#<ExecJS :: ExternalRuntime:0x99ab380 @ name =“Node.js(V8)”,@command = [“nodejs”,“node”],@ 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(' ')") 

我得到了正确的答复。 所以,现在我想知道为什么乘客不接受。

然后,我注意到乘客显示pathvariables,它看起来像:

/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 @全球/斌:/usr/local/rvm/rubies/ruby-2.0.0-p481/bin:在/ usr / Kerberos的/ bin中:/ sbin目录:/ usr / sbin目录:/ bin中:在/ usr / bin中:/ USR /本地/ RVM /斌:/家庭/富/箱

但是,它似乎缺less了usr/local/bin 。 我不是Linux的专家,所以对我来说,解决这个问题最简单的方法就是使用符号链接。 所以,我执行ln -s /usr/local/bin/node /usr/bin/node 。 您可能要注意,我使用命令find / -name node了我的nodejs的path。

然后,我刷新了我的Web应用程序,你不知道它的工作。 所以,如果它对我有用,我希望它可以帮助别人。

更新(可能更好的方法):这可能是一个更好的方法来做到这一点。 我们可以从源代码编译它,如下所示:

 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期望的path中。

我不知道这是否会帮助,但检查你的$ PATH节点在那里。 另外,如果你想使用节点,你应该使用rvm。 检查您的节点安装是否正确完成。