将Rails 3.1项目部署到Heroku时出现问题:无法找到JavaScript运行时

时间:2011-05-20 18:07:23

标签: javascript ruby-on-rails ruby heroku

我无法将rails 3.1 beta项目部署到heroku。问题发生在数据库迁移步骤中。我跑的时候:

heroku rake db:migrate

我收到错误消息:

> rake aborted! 

> Could not find a JavaScript runtime. See
> https://github.com/sstephenson/execjs
> for a list of available runtimes.

> /app/Rakefile:5 

> (See full trace by running task with --trace) 

> (in /app)

但是我可以在本地成功运行应用程序,并且我确实安装了nodejs。知道为什么吗?

这是我的宝石列表:

abstract (1.0.0)
actionmailer (3.1.0.beta1)
actionpack (3.1.0.beta1, 3.0.7)
activemodel (3.1.0.beta1, 3.0.7)
activerecord (3.1.0.beta1)
activeresource (3.1.0.beta1)
activesupport (3.1.0.beta1, 3.0.7)
ansi (1.2.5)
arel (2.1.0)
bcrypt-ruby (2.1.4)
builder (3.0.0, 2.1.2)
bundler (1.0.13)
coffee-script (2.2.0)
coffee-script-source (1.1.0)
configuration (1.2.0)
daemon_controller (0.2.6)
erubis (2.7.0, 2.6.6)
execjs (1.0.0, 0.3.3)
fastthread (1.0.7)
heroku (2.1.4)
hike (1.0.0)
i18n (0.6.0beta1, 0.5.0)
jquery-rails (1.0.1)
json (1.5.1)
json_pure (1.5.1)
launchy (0.4.0)
mail (2.3.0)
mime-types (1.16)
minitest (1.6.0)
multi_json (1.0.1)
mysql (2.8.1)
mysql2 (0.3.2)
oauth (0.4.4)
passenger (3.0.7)
polyglot (0.3.1)
rack (1.3.0.beta, 1.2.2)
rack-cache (1.0.1)
rack-mount (0.7.2, 0.6.14)
rack-ssl (1.3.2)
rack-test (0.6.0, 0.5.7)
rails (3.1.0.beta1)
railties (3.1.0.beta1)
rake (0.8.7)
rdoc (2.5.8)
rest-client (1.6.1)
rubygems-update (1.8.1)
sass (3.1.1)
simplegeo (0.5.1)
sprockets (2.0.0.beta.2)
sqlite3 (1.3.3)
sqlite3-ruby (1.3.3)
term-ansicolor (1.0.5)
therubyracer-heroku (0.8.1.pre3)
thor (0.14.6)
tilt (1.3)
treetop (1.4.9)
turn (0.8.2)
tzinfo (0.3.27)
uglifier (0.5.1)

4 个答案:

答案 0 :(得分:50)

你需要一个用于Rails 3.1的JavaScript引擎(heroku没有),看起来与Heroku一起使用的JavaScript引擎是rubyracer for heroku

Rails使用execjs执行JavaScript,execjs支持7个JavaScript引擎。 Node.js是一个,rubyracer是一个。

Gerred Dillon遇到了类似的问题并写了相关内容。在评论部分提出了一个关于使这个仅作为生产变更的观点,因为您已经将nodejs作为本地JavaScript引擎。所以相关的代码是:

group :production do
  gem 'therubyracer-heroku', '0.8.1.pre3'
end

UPDATE: Heroku有一个名为Cedar的新堆栈,他们推荐使用Rails 3.1.0。 (运行heroku stack以查看您的应用程序所在的堆栈。)Heroku还有doc有关升级到Rails 3.1.0 rc5的信息。他们建议使用'therubyracer-heroku'宝石,因为rc5没有必要。

如果要从较旧的rc升级,请确保更新config / application.rb文件,并运行此命令:

heroku config:add PATH=vendor/bundle/ruby/1.9.1/bin:/usr/local/bin:/usr/bin:/bin:bin

显然,这是在新应用中设置的,但现有应用尚未设置此路径。

答案 1 :(得分:8)

您不一定需要JavaScript运行时才能将Rails 3.1 beta部署到heroku。

只有在部署时缩小javascript(即通过 uglifier gem)或者使用咖啡脚本时才需要JavaScript运行时。

看起来这个javascript运行时依赖将不适用于3.1最终版本。

如果你不介意不缩小你的javascript(如果你没有使用咖啡脚本),那么你可以注释掉 coffee-script,uglifier和execjs gems in Gemfile并在 production.rb 中注释掉 config.assets.js_compressor ,你应该很高兴。

答案 2 :(得分:5)

截至本文发布之日,您仍需指定

gem'therubyracer-heroku','0.8.1.pre3'

在你的gemfile中,以便成功地将Rails 3.1应用程序部署到Heroku的Cedar平台。

虽然可以将Node应用程序部署到Cedar平台,但在部署Rails应用程序时,Cedar堆栈上不存在Node本身,因此您必须捆绑自己的javascript运行时。

现在。

我知道Rails方面的人正在努力消除对拥有js运行时的依赖,http://yehudakatz.com/2011/06/14/what-the-hell-is-happening-to-rails/ 我确信Heroku也正在研究如何使Rails 3.1部署正常工作。

答案 3 :(得分:1)

就我而言,它是在成功上传到Heroku并访问该页面后发生的。

ActionView::Template::Error (Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
2012-01-09T08:21:19+00:00 app[web.1]:   (in /app/app/assets/javascripts/page.js.coffee)):

使用'heroku config设置路径:添加PATH blah'没有帮助。

“rake assets:precompile”刚刚解决了它。

希望能帮助像我这样的人!