向Heroku部署Rails 3.1项目时出现问题:找不到JavaScript运行时 [英] Problem deploying Rails 3.1 project to Heroku: Could not find a JavaScript runtime
问题描述
我在向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)
rubygems-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引擎是 rubyracer 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屋!