Подтвердить что ты не робот

Проблема развертывания проекта Rails 3.1 для Heroku: не удалось найти исполняемую среду JavaScript

У меня возникли проблемы с развертыванием бета-проекта rails 3.1 для 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)
4b9b3361

Ответ 1

Вам нужен механизм JavaScript для Rails 3.1 (у heroku его нет), и кажется, что движок JavaScript, который работает с Heroku, это rubyracer для 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

По-видимому, это установлено в новых приложениях, но существующие приложения не установили этот PATH.

Ответ 2

Вам не обязательно нужно время выполнения JavaScript для развертывания бета-версии Rails 3.1 для heroku.

Время выполнения JavaScript требуется только в том случае, если вы уменьшаете javascript при развертывании (т.е. с помощью uglifier), или если вы используете кофе script.

Похоже, что эта зависимость от выполнения javascript не будет присутствовать в финальной версии 3.1.

Если вы не возражаете против того, чтобы не уменьшать ваш javascript (а также если вы не используете кофе script), вы можете прокомментировать кофе- script, uglifier и execjs gems в Gemfile, а также прокомментируйте config.assets.js_compressor в production.rb, и вам должно быть хорошо идти.

Ответ 3

С даты этого сообщения вам все равно нужно указать

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

в вашем gemfile для успешного развертывания приложения Rails 3.1 на платформе Heroku Cedar.

Пока развертывание приложений Node на платформе Cedar возможно, Node не присутствует в стеке Cedar при развертывании приложений Rails, поэтому вам нужно связать свою собственную среду выполнения JavaScript.

Пока.

Я знаю, что люди на стороне Rails работают над удалением зависимости от времени выполнения js, http://yehudakatz.com/2011/06/14/what-the-hell-is-happening-to-rails/ и я уверен, что Heroku также изучает способы внедрения Rails 3.1.

Ответ 4

В моем случае это произошло после успешной загрузки в 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: add PATH blah" не помогла.

"rake assets: precompile" просто решил это.

Надеюсь, это поможет кому-то вроде меня!