2013-01-06 63 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