2013-01-06 1 views
4

root 사용자로 컴파일하고 설치하여 node.js를 설치했습니다. 나는 이것이 어쩌면 전화 접속이있는 곳이라고 생각한다. 레일 애플 리케이션을 실행하는 사용자로부터 나는 node.js를 확인했다.Rails/execjs에서 Node.js를 찾지 못했습니다.

$ which node 
/usr/local/bin/node 

내 레일 애플 리케이션 (레일 3.2.9) 나는 보편적으로 인정받을 시작 "죄송합니다,하지만 뭔가 잘못했습니다."할 때 프로덕션 오류 로그를 확인하면 Javascript 런타임을 찾을 수 없습니다. 그것은 명백하게 설치되는 것처럼 혼란 스럽다. 그래서 나는 노드 자바 스크립트 런타임을 강요하려고했다. config/boot.rb 파일을 편집하여 편집했습니다 :

프로덕션 로그를 보면서 내 응용 프로그램을 다시 검사했습니다. 이번에는 내가 여전히 오류를 혼란

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' 
) 

여전히 같은 오류가 발생합니다. 노드가 설치되어 사용자가 액세스 할 수 있지만 보석/레일이이를 사용하는 것처럼 보이지 않습니다. 서버가 CentOS 6.3에서 실행됩니다. 오류가 발생하는 특정 javascript 파일은 jquery.nivo.slider.pack.js입니다. 나는 그것을 nivo에서 다운로드 한 후에 편집하지 않았습니다.

+1

귀하의 솔루션이 저에게 효과적이었습니다. 페도라 상자가 있고 phusion 승객을 사용하는 앱을 제공합니다. 비록 내가 런타임 명령을 변경 한 후에 당신이 위에서 언급 한대로 작동하도록 앱을 다시 시작해야했습니다. –

답변

1

내 centos 6.3 시스템에서 source와 nodejs를 설치하는 것과 비슷한 문제가 발생했습니다. 그것은 성공적으로 설치하지만 난 명시 적으로 설치 한 곳으로 PATH (nodejs)을 설정할 때까지 내 ROR 애플리케이션 자산을 컴파일에 실패 유지

[루트] #은
...
설치/usr/지방을 설치하기 /lib/node_modules/npm/html/doc/folders.html
symlinking ../lib/node_modules/npm/bin/npm-cli.js ->/usr/local/bin/npm
/usr의 shebang 업데이트 $ PATH에

:/usr/지방/빈/노드

[루트] # 수출 PATH =/usr/local/bin 디렉토리로/지방/빈/고궁 박물원

이제 작동합니다. 희망이 도움이됩니다!

0

이것이 도움이 될지 모르겠지만 노드가있는 $ PATH를 확인하십시오. 또한 노드를 사용하려면 rvm을 사용해야합니다. 노드 설치가 올바르게 완료되었는지 확인하십시오.

4

그래서 Ruby 2.0.0이 설치되어 있고 CentOS 5.10에 Rails 4.0.2가 있고 Apache2와 Passenger가 있습니다. 내가 시도 내 첫 번째 단계는 다음 명령에서 레일 콘솔 입력을 개방 하였다

# < ExecJS :: ExternalRuntime : 이름 = "노드 @ 0x99ab380

ExecJS.runtime 

그것은 다음과 같은 값을 반환했습니다. "/ 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/[email protected]/bin:/usr/local/rvm/rubies/ruby-2.0.0-p481/bin :는/usr/커버 로스/빈 : 경우/sbin :는/usr/sbin에/빈 :는/usr/빈 :/usr/지방/RVM/빈 :/홈/foo는/빈

, 그것은 보인다 usr/local/bin이 누락되었습니다. 나는 리눅스에 대한 전문 지식이 없기 때문에 이것을 해결할 수있는 가장 쉬운 방법은 상징적 인 링크를 사용하는 것이다. 따라서 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를 여객이 될 것으로 예상 경로에 설치됩니다 이런 식으로.

+0

글쎄, 내가 이것을 발견 할 때까지 수 시간 동안 수색했다. 내 nodejs가 완전히 설치되었고 솔루션이 내 문제를 해결했습니다. 심볼릭 링크를 사용하는 것이 최선의 해결책처럼 보이지는 않지만 .... 어쨌든 고맙습니다 !! – cyber101

관련 문제