我正在关注新的Ubuntu 12.10上的ruby on rails入门指南.我要运行rake db:create但是我收到以下错误:
耙子流产了!找不到JavaScript运行时.有关可用运行时的列表,请参阅https://github.com/sstephenson/execjs.
我一直在搜索,建议的解决方案(见下面列表)是安装一些therubyracer或nodejs,但他们没有解释原因.
在我安装之前我想知道这些JavaScript运行时之间的差异以及为什么我会选择其中一个?
更新:
我刚看了https://github.com/sstephenson/execjs(我知道我应该先读这个,对不起)在我看来,execjs不是一个JavaScript运行时而且我已经拥有它...所以它归结为therubyracer和nodejs ...请原谅我的无知,我已经修改了我的问题
除了Intrepidd的回答:
轨道上的红宝石入门指南支持Intrepidd的答案.请参见4.1"启动Web服务器"一节,其中说:
Rails在一个注释行中为新应用添加了therubyracer gem到Gemfile,如果需要,你可以取消注释.
对于那里的导轨noob(像我一样),GemFile位于rails应用程序的根文件夹中.在我的GemFile中取消注释该行后,我必须运行bundle install以安装therubyracer gem.
我通过从root用户编译和安装来安装node.js. 我想这可能是挂断的地方.从运行rails应用程序的用户我检查了node.js.
$ which node
/usr/local/bin/node
Run Code Online (Sandbox Code Playgroud)
当我启动我的rails应用程序(Rails 3.2.9)时,我得到普遍无益的"我们很抱歉,但出了点问题." 检查生产错误日志我发现找不到Javascript运行时.这显然是安装的,这令人困惑.所以我开始强制使用Node javascript运行时.我编辑了config/boot.rb以包含:
ENV['EXECJS_RUNTIME'] = 'Node'
Run Code Online (Sandbox Code Playgroud)
我在查看生产日志时再次检查了我的应用程序.这次我收到了错误
ActionView::Template::Error (Node.js (V8) runtime is not available on this system
Run Code Online (Sandbox Code Playgroud)
仍然困惑.我去了execjs gem并将runtime命令更改为确切的安装路径.
Node = ExternalRuntime.new(
:name => "Node.js (V8)",
:command => "/usr/local/bin/node",
:runner_path => ExecJS.root + "/support/node_runner.js",
:encoding => 'UTF-8'
)
Run Code Online (Sandbox Code Playgroud)
我仍然得到同样的错误.节点已安装并可由用户访问,但gem/rails似乎无法使用它.服务器运行CentOS 6.3.导致错误被抛出的特定javascript文件是jquery.nivo.slider.pack.js.从nivo下载后我没有编辑.