簡體   English   中英

將Rails 3.1項目部署到Heroku時出現問題:無法找到JavaScript運行時

[英]Problem deploying Rails 3.1 project to Heroku: Could not find a JavaScript runtime

我無法將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)

你需要一個用於Rails 3.1的JavaScript引擎(heroku沒有),看起來與Heroku一起使用的JavaScript引擎是herokurubyracer

Rails使用execjs來執行JavaScript,execjs支持7個JavaScript引擎。 Node.js是一個,rubyracer是一個。

Gerred Dillon遇到了類似的問題並撰寫了相關文章。 在評論部分提出了一個關於使這個僅作為生產變更的觀點,因為您已經將nodejs作為本地JavaScript引擎。 所以相關的代碼是:

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

更新: Heroku有一個名為Cedar的新堆棧,他們推薦使用Rails 3.1.0。 (運行heroku stack ,看看有什么堆棧您的應用程序打開)Heroku上也有一個文檔有關升級到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

顯然,這是在新應用程序中設置的,但現有應用程序尚未設置此PATH。

您不一定需要JavaScript運行時才能將Rails 3.1 beta部署到heroku。

只有在部署時縮小javascript(即通過uglifier gem)或者使用coffee-script時,才需要JavaScript運行時。

看起來這個javascript運行時依賴將不適用於3.1最終版本。

如果你不介意不縮小你的javascript(如果你沒有使用咖啡腳本),那么你可以在Gemfile中注釋掉咖啡腳本,uglifier和execjs gems,並注釋掉config.assets。你的production.rb中的 js_compressor ,你應該很高興。

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

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部署正常工作。

在我的情況下,它發生在成功上傳到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”剛剛解決了它。

希望它能幫助像我這樣的人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM