#javascript #ruby-on-rails #ruby-on-rails-3.1 #v8 #dreamhost
#javascript #ruby-on-rails #ruby-on-rails-3.1 #версия 8 #dreamhost
Вопрос:
Мой веб-сайт был поврежден с тех пор, как Dreamhost обновил свои серверы пару недель назад. Я рвал на себе волосы, пытаясь это исправить, и добился некоторого прогресса, но застрял на том, что, надеюсь, является окончательной проблемой.
Я использую Rails 3.1.1 на Ruby 1.8.7 и получаю сообщение об ошибке «Не удалось запустить приложение Ruby (Rack)» от PhusionPassenger. В нем говорится, что «Не удалось найти среду выполнения JavaScript. Смотрите https://github.com/sstephenson/execjs список доступных сред выполнения. (ExecJS::RuntimeUnavailable)’. Поиск этого в вики Dreamhost предложил решение для установки драгоценного камня ‘therubyracer’.
Итак, я обновил свой gemfile предложенным gem следующим образом:
gem ‘therubyracer’, ‘~> 0.9.9’
РЕДАКТИРОВАТЬ: я также пытался добавить в файл с:
gem ‘therubyracer’, :платформы => :ruby
но это ничего не изменило.
Затем пакет установлен на моем Macbook (под управлением OS X 10.5.8) без сбоев. Однако, это не удается, когда я запускаю ‘cap deploy’ для установки на Dreamhost; Я вижу ошибку при попытке установить libv8, от которого зависит therubyracer.
Кто-нибудь знает, как правильно установить это или любое другое рабочее решение?
Любая другая информация может быть предоставлена по запросу.
Полный отзыв об ошибке от терминала:
- выполнение сервера «cd /home/futureproof/abunchofletters.co.uk/releases/20111118003703 amp;amp; bundle install —gemfile /home/futureproof/abunchofletters.co.uk/releases/20111118003703/Gemfile —path /home/futureproof /.gems /bundle —deployment —quiet —without development test»: [«abunchofletters.co.uk «] [abunchofletters.co.uk ] выполнение команды ** [out :: abunchofletters.co.uk ] К сожалению, произошла неустранимая ошибка. Пожалуйста, сообщите об этой ошибке в Bundler issue tracker по адресу https://github.com/carlhuda/bundler/issues чтобы мы могли это исправить. Спасибо! ** [out :: abunchofletters.co.uk ] /usr/lib/ruby/1.8/rubygems/installer.rb:483:в
build_extensions':
каждом’ ** [out :: abunchofletters.co.uk ] из /usr/lib/ruby/1.8/rubygems/installer.rb:446:в
ERROR: Failed to build gem native extension.
(Gem::Installer::ExtensionBuildError) ** [out ::
abunchofletters.co.uk] ** [out :: abunchofletters.co.uk]
/usr/bin/ruby1.8 extconf.rb ** [out :: abunchofletters.co.uk] ***
extconf.rb failed *** ** [out :: abunchofletters.co.uk] Could not
create Makefile due to some reason, probably lack of ** [out ::
abunchofletters.co.uk] necessary libraries and/or headers. Check the
mkmf.log file for more ** [out :: abunchofletters.co.uk] details.
You may need configuration options. ** [out :: abunchofletters.co.uk]
** [out :: abunchofletters.co.uk] Provided configuration options: ** [out :: abunchofletters.co.uk] --with-opt-dir ** [out ::
abunchofletters.co.uk] --without-opt-dir ** [out ::
abunchofletters.co.uk] --with-opt-include ** [out ::
abunchofletters.co.uk] --without-opt-include=${opt-dir}/include **
[out :: abunchofletters.co.uk] --with-opt-lib ** [out ::
abunchofletters.co.uk] --without-opt-lib=${opt-dir}/lib ** [out ::
abunchofletters.co.uk] --with-make-prog ** [out ::
abunchofletters.co.uk] --without-make-prog ** [out ::
abunchofletters.co.uk] --srcdir=. ** [out :: abunchofletters.co.uk]
--curdir ** [out :: abunchofletters.co.uk] --ruby=/usr/bin/ruby1.8 ** [out :: abunchofletters.co.uk] extconf.rb:13: uninitialized constant Gem (NameError) ** [out :: abunchofletters.co.uk] Checking
for Python... ** [out :: abunchofletters.co.uk] ** [out ::
abunchofletters.co.uk] Gem files will remain installed in
/home/futureproof/.gems/bundle/ruby/1.8/gems/libv8-3.3.10.4 for
inspection. ** [out :: abunchofletters.co.uk] Results logged to
/home/futureproof/.gems/bundle/ruby/1.8/gems/libv8-3.3.10.4/ext/libv8/gem_make.out
** [out :: abunchofletters.co.uk] from /usr/lib/ruby/1.8/rubygems/installer.rb:446:inbuild_extensions' **
установке’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/source.rb:90:в
[out :: abunchofletters.co.uk] from
/usr/lib/ruby/1.8/rubygems/installer.rb:198:ininstall' ** [out :: abunchofletters.co.uk] from
сохраненных путях’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/source.rb:89:в
/home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/rubygems_integration.rb:78:in
install' ** [out :: abunchofletters.co.uk] from
install_gem_from_spec’ ** [выход :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/rubygems_integration.rb:93:в
/home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/installer.rb:73:in
with_build_args' ** [out :: abunchofletters.co.uk] from
install_gem_from_spec’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/installer.rb:56:в
/home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/installer.rb:72:in
run' ** [out :: abunchofletters.co.uk] from
выполнить’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/installer.rb:12:в
/home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/installer.rb:55:in
install' ** [out :: abunchofletters.co.uk] from
установке’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/vendor/thor/task.rb:22:в
/home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/cli.rb:219:in
send' ** [out :: abunchofletters.co.uk] from
запуске’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/vendor/thor/invocation.rb:118:в
/home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/vendor/thor/task.rb:22:in
invoke_task' ** [out :: abunchofletters.co.uk] from
отправке’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/vendor/thor/base.rb:386:в
/home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/vendor/thor.rb:263:in
start' ** [out :: abunchofletters.co.uk] from
загрузке’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/bin/bundle: 19 команда завершена за 13170 мс *** [развертывание: update_code] откат * выполнение «rm -rf /home/futureproof/abunchofletters.co.uk/releases/20111118003703; true» серверы: [«abunchofletters.co.uk «] [abunchofletters.co.uk ] сбой выполнения командной строки, завершившийся за 563 мс: «sh -c ‘cd /home/futureproof/abunchofletters.co.uk/releases/20111118003703 amp;amp; bundle install —gemfile /home/futureproof/abunchofletters.co.uk/releases/20111118003703/Gemfile —path /home/futureproof/.gems/ пакет -развертывание -тихое -без тестирования разработки»» вкл. abunchofletters.co.uk
/home/futureproof/.gems/gems/bundler-1.1.rc/bin/bundle:13 ** [out ::
abunchofletters.co.uk] from /home/futureproof/.gems/bin/bundle:19:in
Ответ №1:
Если вы используете Ubuntu, установите nodejs
sudo apt-get install nodejs
Комментарии:
1. такс, привет из Колумбии
2. Вместо того, чтобы благодарить, я нахожу любопытным, что для Ubuntu 14.04 установка nodejs приводит к успешному результату, а
libv8-dev
нет.3. это решение также работает для macos
brew install node
Ответ №2:
libv8
это библиотека операционной системы; вам необходимо установить правильную системную библиотеку Linux. Если вы используете Ubuntu, это
sudo apt-get install libv8-dev
В качестве альтернативы вы можете установить, node.js
который доступен в виде пакета Debian / Ubuntu для различных дистрибутивов, например http://ppa.launchpad.net/chris-lea/node.js/ubuntu
Вы можете избавить себя от многих проблем, развернув вместо этого Heroku, где вам не нужно управлять ОС или компонентами для gems.
Комментарии:
1. У меня нет разрешения sudo на общем сервере, но мне удалось установить node.js который решил проблему. Я подумываю о том, чтобы дать Heroku надлежащий ход сейчас, хотя, похоже, возникают бесконечные проблемы с получением сайта Rails 3, работающего с конвейером активов.
2. @Rich, Heroku, безусловно, лучший вариант. Как разработчик я обнаружил, что не хочу иметь дело со всем, что требуется для поддержания работоспособности сервера, защиты, установки исправлений, резервного копирования и т.д. В лучшем случае это отнимает много времени, в худшем — очень хрупкий. Пусть это сделают эксперты, которые делают это хорошо.
Ответ №3:
я использую эти драгоценные камни на Dreamhost с Rails 3.1 для конвейера ресурсов
group :assets do
gem 'execjs'
gem 'therubyracer', :platforms => :ruby
gem 'johnson'
gem 'sass-rails', " ~> 3.1.0"
gem 'coffee-rails', "~> 3.1.0"
gem 'uglifier'
end
therubyracer в качестве предварительного компилятора и johnson в качестве среды выполнения.
Это работает для меня в 2 приложениях Rails 3.1, размещенных Dreamhost.
Комментарии:
1. Спасибо за комментарий. Вы используете общий сервер Dreamhost или VPS? Какую версию Ruby вы используете?
2. В 2021 году, Rails 4.2.10, этот ответ решил мою проблему на общем сервере Dreamhost
Ответ №4:
Вам просто нужно получить libv8
, для ОС с Brew просто сделайте:
brew install v8
Ответ №5:
Я нахожусь на общем сервере dreamhost.
Я установил nodejs без использования root / sudo. На сервере:
#download node js (check last version from web)
$ wget http://nodejs.org/dist/v0.8.16/node-v0.8.16-linux-x86.tar.gz
#untar
$ tar xzf node-v0.8.16-linux-x86.tar.gz
Наконец, добавьте его путь к deploy.rb, добавив следующую строку (в этом случае добавляются еще несколько путей):
default_environment["PATH"] = ":/home/myUser/soft/node-v0.8.16-linux-x86/bin:/home/myUser/.gems/bin:/usr/lib/ruby/gems/1.8/bin/:$PATH"
Вы закончили
Комментарии:
1. В моем случае ПУТЬ для добавления в deploy.rb был просто:
default_environment["PATH"] = "$HOME/local/bin:$PATH"
2. Я пытаюсь использовать ваше решение, но не могу найти файл deploy.rb. Как я могу это найти? Должен ли я это где-то создать?
Ответ №6:
Я только что видел презентацию по этому вопросу.
До сих пор я использовал rubytheracer. По-видимому, это не так уж и здорово. И это огромно.
Но вы можете использовать любую среду выполнения javascript.
Другие два рекомендуемых — это execjs и node.js (что сейчас очень актуально).
Обязательно укажите gem install
выбранный gem, а затем bundle install
или bundle update
для вашего приложения.
Еще одно замечание заключается в том, что вам также следует переключиться на 1.9.2.
Установите RVM (bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )) и у вас могут быть параллельные версии 1.8.7 и 1.9.2.
Ответ №7:
Я бы предложил установить Nodejs. У меня это сработало.
Просто зайдите в свой терминал и введите :
sudo apt-get install node.js
Введите свой пароль…И нажимайте «Y» всякий раз, когда он запрашивает подтверждение. Я надеюсь, что это поможет!!!
Комментарии:
1. Как я сказал в ответе Wolfram, у меня нет разрешения sudo на моем общем сервере, но это может хорошо сработать для тех, кто это делает.
Ответ №8:
Я только что столкнулся с той же проблемой на моем компьютере разработчика Win7. Это похоже на установку https://github.com/hiranpeiris/therubyracer_for_windows и добавление gem 'therubyracer'
к Gemfile
упорядочивает ситуацию.
Перед:
$ rails generate
c:/Ruby193/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
from c:/Ruby193/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs.rb:5:in `<module:ExecJS>'
(...)
По сути, это означает, что Rails нуждается в rubyracer
и libv8
.
После:
$ rails generate
SECURITY WARNING: No secret option provided to Rack::Session::Cookie.
This poses a security threat. It is strongly recommended that you
provide a secret to prevent exploits that may be possible from crafted
cookies. This will not be supported in future versions of Rack, and
future versions will even invalidate your existing user cookies.
Called from: c:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/session/abstract_store.rb:28:in `initialize'.
Usage: rails generate GENERATOR [args] [options]
(...)
Ответ №9:
Добавьте следующий gem в Gemfile и попробуйте установить пакет
gem «therubyracer», «~> 0.10.2»
Ответ №10:
Эта ошибка вызвана отсутствием среды выполнения Javascript. Как Nodejs. Либо вы ее не выбрали, либо она не установлена.
Посмотрите, есть ли у вас уже nodejs, использующие,
nvm list
nvm use <version> //to use it (i.e nvm use 14)
если он не установлен, используйте,
sudo apt-get install nodejs