#javascript #ruby-on-rails #ruby #heroku
#javascript #ruby-on-rails #ruby #heroku
Вопрос:
У меня возникли проблемы с развертыванием бета-проекта rails 3.1 в heroku. Проблема возникла на этапе миграции базы данных. Когда я запускал:
heroku rake db:migrate
Я получил сообщение об ошибке:
> rake прерван! > Не удалось найти среду выполнения JavaScript. Смотрите > https://github.com/sstephenson/execjs > для списка доступных сред выполнения. > /app /Rakefile:5 > (Смотрите полную трассировку, запустив task с помощью --trace) > (в / 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)
Ответ №1:
Вам нужен движок JavaScript для Rails 3.1 (в heroku его нет), и похоже, что движок JavaScript, который работает с Heroku, является rubyracer для heroku.
Rails использует execjs для выполнения JavaScript, а execjs поддерживает 7 движков JavaScript. Node.js является одним, и rubyracer является одним.
У Джерреда Диллона была похожая проблема, и он написал об этом. В разделе комментариев был поднят вопрос о том, чтобы сделать это изменение только производственным, поскольку у вас уже есть 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
По-видимому, это задано в новых приложениях, но существующие приложения не задали этот ПУТЬ.
Комментарии:
1. Я только что попытался это сделать, но файл не удается установить на heroku. Поиск в Google проблемы показывает множество похожих проблем.
2. также может потребоваться обновить строку 3 в config/ initializers /session_store.rb на что-то вроде MyApp::Application.config.session_store :cookie_store, :key => ‘_blahblahblah_session’
3. У меня действительно установлен и используется этот gem в Gemfile. # Движки шаблонов ресурсов gem ‘sass’ gem ‘coffee-script’ gem ‘, gem ‘uglifier’ gem ‘jquery-rails’ gem ‘therubyracer-heroku’, ‘0.8.1.pre3’, :платформы => :ruby # Использовать unicorn в качестве веб-сервера # gem ‘unicorn’ # Развернуть с помощью Capistrano # gem ‘capistrano’ # Использовать отладчик # gem ‘ruby-debug19’, :требовать => ‘ruby-debug’ group :test сделайте # Pretty printed тестовый выходной камень ‘turn’, :require => false end
4. Извините, я должен немного переформатировать свой предыдущий комментарий. У меня действительно есть этот драгоценный камень, установленный и используемый в Gemfile: gem ‘therubyracer-heroku’, ‘0.8.1.pre3’, :platforms => :ruby, но это не сработало.
5. Теперь у Heroku есть стек, который поставляется с node.js которая, вероятно, решает эту проблему. Проверьте это на devcenter.heroku.com/articles/cedar
Ответ №2:
Вам не обязательно нужна среда выполнения JavaScript для развертывания бета-версии Rails 3.1 в heroku.
Среда выполнения JavaScript требуется только в том случае, если вы сокращаете javascript при развертывании (т. Е. с помощью драгоценного камня uglifier) или если вы используете coffee-script.
Похоже, что эта зависимость от среды выполнения javascript не будет присутствовать в финальной версии 3.1.
Если вы не возражаете против того, чтобы не сокращать свой javascript (а также если вы не используете coffee-script), то вы можете закомментировать драгоценные камни coffee-script, uglifier и execjs в Gemfile, а также закомментировать config.assets.js_compressor в вашем production.rb, и все должно быть готово.
Ответ №3:
На дату публикации этого сообщения вам все еще нужно указать
gem ‘therubyracer-heroku’, ‘0.8.1.pre3’
в вашем gemfile для успешного развертывания приложения Rails 3.1 на платформе Cedar от Heroku.
Хотя возможно развертывание приложений 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: добавить ПУТЬ blah’ не помогло.
«rake assets: precompile» только что решил это.
Надеюсь, это поможет кому-нибудь вроде меня!