向Heroku部署Rails 3.1项目时出现问题:找不到JavaScript运行时 [英] Problem deploying Rails 3.1 project to Heroku: Could not find a JavaScript runtime

查看:86
本文介绍了向Heroku部署Rails 3.1项目时出现问题:找不到JavaScript运行时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在向heroku部署rails 3.1 beta项目时遇到问题。问题发生在数据库迁移步骤。当我跑时:

  heroku rake db:migrate 

我收到错误信息:

 
> rake aborted!

>找不到JavaScript运行时。有关可用运行时的列表,请参阅
> https://github.com/sstephenson/execjs
>。

/ app / Rakefile:5

>(通过使用--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-脚本(2.2.0)
coffee-script-source(1.1.0)
配置(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)
加息(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)
乘客(3.0.7)
多边货币(0.3.1)
机架1.3.0.beta,1.2.2)
机架-cache(1.0.1)
机架安装(0.7.2,0.6.14)
rack-ssl(1.3.2)
机架测试(0.6.0,0.5.7 )
rails(3.1.0.beta1)
railties(3.1.0.beta1)
rake(0.8.7)
rdoc(2.5.8)
其余-client(1.6.1)
ruby​​gems-update(1.8.1)
sass(3.1.1)
simplegeo(0.5.1)
链轮(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)


解决方案

一个Rails 3.1的JavaScript引擎(heroku没有),看来和Heroku一起使用的JavaScript引擎是 ruby​​racer for heroku



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



Gerred Dillon 有类似的问题,并写了关于它。在评论部分中提出了一个观点,即将此仅作为生产改变,因为您已经将nodej作为本地JavaScript引擎。所以相关的代码是:

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

更新: strong> 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 

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


I am having trouble deploying a rails 3.1 beta project to heroku. The problem happened at the database migration step. When I ran:

heroku rake db:migrate

I got error message:

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

But I can successfully run the application locally, and I do have nodejs installed. Any idea why?

Here my gem list:

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)

解决方案

You need a JavaScript engine for Rails 3.1 (heroku doesn’t have one), and it appears that the JavaScript engine that works with Heroku is the rubyracer for heroku.

Rails uses execjs to execute JavaScript and execjs supports 7 JavaScript engines. Node.js is one, and rubyracer is one.

Gerred Dillon had a similar problem and wrote about it. In the comment section a point was raised about making this a production only change, since you already have nodejs as your local JavaScript engine. So the relevant code is:

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

UPDATE: Heroku has a new stack, called Cedar, that they recommend for Rails 3.1.0. (Run heroku stack to see what stack your app is on.) Heroku also has a doc about upgrading to Rails 3.1.0 rc5. They recommend not using the ‘therubyracer-heroku’ gem anymore as it’s not necessary with rc5.

If you are upgrading from an older rc, make sure to update your config/application.rb file, and also run this command:

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

Apparently, this is set in new apps, but existing apps have not set this PATH.

这篇关于向Heroku部署Rails 3.1项目时出现问题:找不到JavaScript运行时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆