Entry tags:
Special Enterprise Programming Olympics - первый результат
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Проект и инструкция по деплойменту: https://github.com/iced/worm-reports
На данный момент деплоймент этого дела выглядит как пошаговая стратегия.
Причем ребе айсед принимает активное участие в деплойменте, см https://github.com/iced/worm-reports/commits/ за 06.02
1) поставить curl 2) bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer) [[ -s "/home/zju/.rvm/scripts/rvm" ]] && source "/home/zju/.rvm/scripts/rvm" # Load RVM into a shell session *as a function* 3) source ~/.profile
инсталлятор меняет ~/.profile но в инструкции по rvm написано ~/.bash_profile
про ~/.profile сказано только в выводе bash
Первый затык:
инсталляция rvm и запуск rvm requirements выдает набор текста:
100 799k 100 799k 0 0 175k 0 0:00:04 0:00:04 --:--:-- 276k Upgrading the RVM installation in /home/zju/.rvm/ Removing rvm loading line from '/home/zju/.profile'. Adding rvm loading line to '/home/zju/.profile'. Upgrade Notes: * No new notes to display. # RVM: Shell scripts enabling management of multiple ruby environments. # RTFM: https://rvm.beginrescueend.com/ # HELP: http://webchat.freenode.net/?channels=rvm (#rvm on irc.freenode.net) # Screencast: http://screencasts.org/episodes/how-to-use-rvm # In case of any issues read output of 'rvm requirements' and/or 'rvm notes' Upgrade of RVM in /home/zju/.rvm/ is complete. # zju, # # Thank you for using RVM! # I sincerely hope that RVM helps to make your life easier and more enjoyable!!! # # ~Wayne zju@ubuntu00:~$ source ~/.profile zju@ubuntu00:~$ rvm requirements Requirements for Linux ( DISTRIB_ID=Ubuntu DISTRIB_RELEASE=10.04 DISTRIB_CODENAME=lucid DISTRIB_DESCRIPTION="Ubuntu 10.04.3 LTS" ) NOTE: 'ruby' represents Matz's Ruby Interpreter (MRI) (1.8.X, 1.9.X) This is the *original* / standard Ruby Language Interpreter 'ree' represents Ruby Enterprise Edition 'rbx' represents Rubinius bash >= 4.1 required curl is required git is required (>= 1.7 for ruby-head) patch is required (for 1.8 rubies and some ruby-head's). To install rbx and/or Ruby 1.9 head (MRI) (eg. 1.9.2-head), then you must install and use rvm 1.8.7 first. Additional Dependencies: # For Ruby / Ruby HEAD (MRI, Rubinius, & REE), install the following: ruby: /usr/bin/apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsq lite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion # For JRuby, install the following: jruby: /usr/bin/apt-get install curl g++ openjdk-6-jre-headless jruby-head: /usr/bin/apt-get install ant openjdk-6-jdk # For IronRuby, install the following: ironruby: /usr/bin/apt-get install curl mono-2.0-devel
Я считаю, что это понятно только тому, кто варится в руби. Очевидно, админ-деплоер в норме руби знать не будет.
Далее, выполняем:
/usr/bin/apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
Я то знаю, что это значит, что нужно запускаться от root, но где это в документации? :)
Далее:
инструкция по rvm: rvm install 1.9.3
Инструкция айседа: rvm install 1.9.3 --default
Я знаю, чем это отличается и какую из команд выбрать, но будет ли это знать тот, кто выполняет деплоймент?
git checkout git@github.com:iced/worm-reports.git - тут ошибка, правильно
git clone https://github.com/iced/worm-reports.git или же скачать zip
далее: cd worm_reports -> cd worm-reports
далее: настраиваем postgresql и базу worm_reports_development. Это не относится к проекту, т.к. я сразу сказал что база будет готовая, но надо проверить как отработает миграция. Кстати, в инструкции нигде не сказано, что база должна быть создана и пользователь должен существовать):
1) sudo -u postgres psql
2) create user worm password 'worm' createdb;
3) \q
4) psql -U worm -d template1
5) create database worm_reports_development;
Далее bundle:
bundle Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. /home/zju/.rvm/rubies/ruby-1.9.3-p0/bin/ruby extconf.rb checking for pg_config... no No pg_config... trying anyway. If building fails, please try again with --with-pg-config=/path/to/pg_config checking for libpq-fe.h... no Can't find the 'libpq-fe.h header *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/home/zju/.rvm/rubies/ruby-1.9.3-p0/bin/ruby --with-pg --without-pg --with-pg-dir --without-pg-dir --with-pg-include --without-pg-include=${pg-dir}/include --with-pg-lib --without-pg-lib=${pg-dir}/lib --with-pg-config --without-pg-config --with-pg_config --without-pg_config Gem files will remain installed in /home/zju/.rvm/gems/ruby-1.9.3-p0/gems/pg-0.12.2 for inspection. Results logged to /home/zju/.rvm/gems/ruby-1.9.3-p0/gems/pg-0.12.2/ext/gem_make.out An error occured while installing pg (0.12.2), and Bundler cannot continue. Make sure that `gem install pg -v '0.12.2'` succeeds before bundling. zju@ubuntu00:~/worm-reports$
не работает. Валится на сборке гема 'pg'. Ребе айсед пофиксил документацию, дописал нужную команду: apt-get install libpq-dev
Я бы это собрал и сам, но при деплойменте рыться в логах bundler и вспоминать в каком пакете живет хидер от postgresql - печально. Ладно, ставим libpq-dev, перезапускаем bundle. Откуда мы знаем, что повторный запуск безопасен? Ну, верим в честное слово линуксоидов, как обычно.
далее: можно пойти по оригинальной версии инструкции и запустить rake:dbmigrate:
rake aborted!
Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
(See full trace by running task with --trace)
читаем обновленнную версию инструкции и идем читать https://github.com/sstephenson/execjs и https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager (не забываем, мы деплоим у клиента, в ебенях ада, под чутким надзором службы безопасности и ИТ-службы клиента). Делаем, как там написано, ставим левый софт и левый репозиторий (http://ppa.launchpad.net/chris-lea/node.js/ubuntu/ lucid/main Translation-en_US):
sudo apt-get install python-software-properties sudo add-apt-repository ppa:chris-lea/node.js sudo apt-get update sudo apt-get install nodejs
Далее rake db:migrate, rake db:seed и rails -s отрабатывают как положено. Приложение отдеплоено (в девелопмент режиме, с Webrick?), будем проверять( инструкцию не читаем, само собой):
http://test:3000
Routing Error
No route matches [GET] "/"
Try running rake routes for more information on available routes.
zju@ubuntu00:~/worm-reports$ rails s => Booting WEBrick => Rails 3.2.1 application starting in development on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server [2012-02-06 14:27:13] INFO WEBrick 1.3.1 [2012-02-06 14:27:13] INFO ruby 1.9.3 (2011-10-30) [i686-linux] [2012-02-06 14:27:13] INFO WEBrick::HTTPServer#start: pid=26298 port=3000 Started GET "/" for 192.168.240.18 at 2012-02-06 14:29:11 +0300 ActionController::RoutingError (No route matches [GET] "/"): actionpack (3.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call' actionpack (3.2.1) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call' railties (3.2.1) lib/rails/rack/logger.rb:26:in `call_app' railties (3.2.1) lib/rails/rack/logger.rb:16:in `call' actionpack (3.2.1) lib/action_dispatch/middleware/request_id.rb:22:in `call' rack (1.4.1) lib/rack/methodoverride.rb:21:in `call' rack (1.4.1) lib/rack/runtime.rb:17:in `call' activesupport (3.2.1) lib/active_support/cache/strategy/local_cache.rb:72:in `call' rack (1.4.1) lib/rack/lock.rb:15:in `call' actionpack (3.2.1) lib/action_dispatch/middleware/static.rb:53:in `call' railties (3.2.1) lib/rails/engine.rb:479:in `call' railties (3.2.1) lib/rails/application.rb:220:in `call' rack (1.4.1) lib/rack/content_length.rb:14:in `call' railties (3.2.1) lib/rails/rack/log_tailer.rb:14:in `call' rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service' /home/zju/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service' /home/zju/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run' /home/zju/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread' Rendered /home/zju/.rvm/gems/ruby-1.9.3-p0/gems/actionpack-3.2.1/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (2.1 ms)
Ответ ребе айседа: "http://test:3000/reports блядь". В документации это написано, но мы ее не читаем, само собой(ибо заебались от предыдущего всего).
TL;DR: У меня приложение поставилось (по последней версии инструкции) без явных проблем, вперемежку с записью результатов в ЖЖ и спорами с айседом. Тем не менее, первая версия инструкции содержала ошибки и несколько умолчаний (nodejs, lib_pqdev).
У
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Частично проблема в том, что она спешит, не всегда читает вывод команд и промахивается по кнопкам, а опыта для диагностики странных ошибок по оккультным сообщениям у нее недостаточно. Как минимум, один такой случай я видел.
(переформулирую более литературно: у нее мало опыта, чтобы не допускать чортово вуду на автомате(как это делают айсед, я и прочие ребе) и мало опыта, чтобы допущенное чортово вуду исправлять, исходя из оккультной симптоматики).
Проблемы:
1) .bash_profile и .profile - это упоминается в выводе инсталлятора rvm, но среди полстраницы вывода нужно заметить это и увязать с тем, что нужно выполнить source ~/.profile а не source ~/.bash_profile, как написано на сайте rvm. Т.е. "ответвление в инструкции".
2) rvm не поставился. По той причине, что rvm requirements не выдал список требований. Я не знаю, почему.
3) Вывод rvm requirements понятен только тем, кто варится в руби или вообще в разработке под линукс.
Итого: подобный деплоймент годится только для разработчиков или продвинутых админов, которым не влом делать весь вышеописанный ад.
Как бы переделал инструкцию по деплойменту:
1) Все инструкции с внешних сайтов перенес бы в свою.
2) Для каждой команды добавил бы подробное описание, что она делает, и какой должен быть вывод. Это обязательно, т.к. даже я не знаю, что делает та или иная команда и верно ли она отработала - это я решал при своем деплойменте реально НАУГАД.
Насчет того, что ставить надо из пакетов и реп: все верно, но ребе айсед сознательно выбрал идеологически другой метод, т.е. формально его сравнить с пакетным менеджером и прочим сложно. Как лучше делать, я не знаю. Лично я бы предпочел стабильный метод с пакетами, потому что мне подобная идеология ближе.
Приложение работает, его я оттестирую чуть попозже.
no subject
no subject
It's your fucking Rails application. You know how to run it. If for some reason you don't, read instructions below. Please note, instructions assumes that you can read them, copy-paste commands and read their output. If you can't do that, click http://www.mcdonalds.com.
no subject