2013-01-06 34 views
4

我通过编译并从root用户安装node.js来安装node.js。我想这可能是挂断的地方。从运行rails应用程序的用户,我检查了node.js.未找到Rails/execjs的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下载它后我没有编辑它。

+1

您的解决方案适用于我。我有一个fedora盒子,并使用phusion乘客服务一个应用程序。尽管如此,我必须重新启动应用程序,但在更改运行时命令之后,正如您在上面所指出的那样,这样才能工作 –

回答

1

我有我的centos 6.3系统上安装nodejs与源代码的类似问题。它安装成功,但我一直在我的编译程序ROR资产失败,直到我明确设置的路径,它被安装在那里(的NodeJS)

[根]#make install的
...
安装在/ usr /本地/lib/node_modules/npm/html/doc/folders.html
symlinking ../lib/node_modules/npm/bin/npm-cli.js - >/usr/local/bin/npm
更新/ usr的shebang/local/bin中/ NPM到/ usr/local/bin中/节点

[根]#出口PATH =的/ usr/local/bin中:$ PATH

现在,它的工作。希望有所帮助!

0

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

4

因此,我在CentOS 5.10上安装了Ruby 2.0.0并使用带有Passenger的Apache2来安装Rails 4.0.2。我的第一步,我想是开放的轨道控制台,然后输入以下命令:

ExecJS.runtime 

它返回以下值:

#< ExecJS :: ExternalRuntime:0x99ab380 @名称=“节点。 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(' ')") 

,我得到了正确的反应。所以,现在我想知道Passenger为什么没有选择它。

然后,我注意到,乘客显示路径变量,它看起来像:

/home/foo/vendor/bundle/ruby/2.0.0/bin:/usr/local/rvm/gems /ruby-2.0.0-p481/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/rubies/ruby-2.0.0-p481/bin :在/ usr/Kerberos的/ bin中:/ sbin目录:/ usr/sbin目录:/ bin中:在/ usr/bin中:在/ usr /本地/ RVM /斌:/家庭/富/箱

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

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

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

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希望的路径中。

+0

好吧,我搜索了几个小时,直到找到它。 我的nodejs已完全安装,您的解决方案解决了我的问题。 虽然使用符号链接看起来不是最好的解决方案.... 无论如何,谢谢! – cyber101