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
(no subject)
(no subject)
no subject
no subject
no subject
no subject
Все мои энтерпрайзи-поделия запускаются как java -jar myEnterpriseShit.jar, и самоконфигурируются (а если не могут само- — задают вопросы).
Или учитесь у инсталлятора вордпресса.
no subject
смысла делать хороший инсталятор для "давайте померяемся ЯП" я не вижу.
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(Anonymous) 2012-02-06 03:05 pm (UTC)(link)Деплоить так продакшин никто не будет в здравом уме. РВМ тащить на продакшин тоже тот еще изврат (разве что на дешевый виртуальный сервер, где крутиться 10 разных версий руби).
Гемсеты создавать смысла нет, если используется bundler. А он тут используется.
Рантайм для ассетов ставят из тех же пакетов шефом.
По коду тоже есть замечания, но так как программировалось на скорость, как я понимаю, все вполне нормально выглядит, разве что куча респондеров режет глаза. Я бы вынес логику в lib. Почему в lib валяется сторонняя (?) библиотека, я тоже не понимаю.
(no subject)
no subject
no subject
если мы предпологаем что жаба стоит уже такая какая надо, то давай предположим что стоит и такой какой надо руби. а гемы забандлим, хуле. и весь деплой будет `rails s`.
(no subject)
(no subject)
no subject
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(Anonymous) - 2012-02-07 06:24 (UTC) - Expand(no subject)
(Anonymous) - 2012-02-07 06:36 (UTC) - Expand(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(Anonymous) - 2012-02-06 15:26 (UTC) - Expand(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
Нуслирубы.no subject
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
no subject
напился и сидит в вытрезвителидисквалифицировался. артурег не может залить проект на гитхаб и наверное заливает на мегааплоад.no subject
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
Чтобы даже при ошибках было понятно "куда идти дальше".
no subject
no subject
no subject
no subject
(no subject)
(no subject)
(no subject)
no subject
Я хз как оно вообще по-жизни, но, по-моему, лучше криво деплоящееся решение на руби, нежели вовсе отсутствующие решения на пхп или жабе.
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
жаль что руби а не питон =) ну да фиг с ним =)
а где остальные участники регаты??
где реальные прожекты на кровавом интрепрайс жаба и моем любимом php ??
no subject
Про рhр пока не слышно, но это ожидаемо - для рhр почти любая задача слишком сложная. :)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
Плюнул и завел софт айседа на FreeBSD :)
(no subject)
(no subject)