GIT, RVM, FIRST HEROKU APP

1,469 views
1,360 views

Published on

Altoros training #2

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,469
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • Очень многое в экосистеме RoR в той или иной степени связанос Git. Следовательно настройку рабочего окружения начнем именно с установки git.
  • Есть несколько вариантов установки: из исходников, готовые бинарники.Оптимальный для нас вариант - установка через менеджер пакетов: apt-get / aptitudeЭто займет несколько минут. После того как гит установлен, следует его настроить.
  • Для этого есть утилита gitconfig. Все сделанные далее изменения будут перманентны. Но по желанию их конечно же можно изменить. Первое что следует сделать это указать имя и email. Что мы сейчас и сделаем.Эти переменные очень важны, т.к. во всех Ваших последующих комитах будет записано их значение. Это как Ваша подпись на каждом комите - сказать что это сделали не Вы уже не получится :)Как Вы заметили в предыдущих командах мы использовали ключ --global Это означает что мы делаем изменения на уровне пользователя системы. Настройки git могут храниться в трех местах:1. /etc/gitconfig - конфиг для всех пользователей системы и всех проектов. gitconfig будет писать в этот файл когда передан ключ --system2. ~/.gitconfig - конфиг для текущего пользователя системы. gitconfig будет писать в этот файл когда передан ключ --global3. <PATH_TO_REPO>/.git/config - конфиг текущего репозитория. Ключ не надоЧем ближе файл к репозиторию - тем выше приоритет его переменных. Например, только что мы указали user.name и user.email на уровне --global, т.е. эта подпись комитов будет использоваться во всех репозиториях текущего пользователя. Если в каком-то из проектов Вы захотите использовать другой email для подписи - следует в самом репозитории переопределить это значение (<PATH_TO_REPO>/.git/config).
  • Проверить значения переменных можно так gitconfig --listОдна и таже переменная может быть выведена несколько раз.Если надо проверить значение конкретной переменной:gitconfiguser.name
  • Теперь перейдем к установке руби. Для Рельс третьей версии нужен ruby1.8.7 и выше. Я рекомендую ruby 1.9.xRVM - позволяет установить несколько версий руби. Это очень полезно когда у вас есть несколько проектов, тогда для каждого можно настроить свое окружение гемов и разные версии руби.Устанавливать RVM будемтак:
  • rvm install 1.9.3 - Нас еще раз rvm предупредило о зависимостях (который мы только что установили). Нажимаем 'q' чтобы продолжить установку.
  • В RVM можно для каждой версии руби иметь несколько набровгемов, которые называются gemsetRubyGems это менеджер пакетов для РубиRubyGems разработана для простой уcтановкигемов.  Начиная с Ruby версии 1.9 RubyGems является частью стандартной библиотеки Ruby.Gem - стандартный формат для распространения руби библиотек и программ в автономном форматеОбращаю внимание на то что гемсеты создаются для каждой версии руби отдельно, т.е. у вас не получится использовать один и тот же гемсет в разных версиях руби.
  • Как видно из лога, гемrails также устанавливает все свои зависимости, генерирует ri и rdoc документацию. Многие программисты (я в том числе) находят временнЫе затраты на генерацию этой документации не стоящими результата и предпочитают использовать online ресурсы. Например http://api.rubyonrails.org
  • Рельсы установлены. Проверить версию рельс можно так: rails -vСамое время попробовать создать новый проект.Как видно из лога, команда railsnew сгенерировала скелет проекта и установила все необходимые гемы. Скелет проекта это одно из многих преимуществ rails. Одной командой мы только что сгенерировали работающее приложение. А так как структура проекта одинаковая, вы всегда сможете быстро найти интересующий код в чужом проекте.
  • Давайте рассмотрим структуру приложение на RoR. Я опущу директории/файлы, которые не важны на данный момент:app/ - основной код приложения. Здесь находятся модели, вьюхи, контроллеры и хелперы.config/ - конфигурация и инициализация проекта здесьdb/ - здесь хранятся файлы связанные с базой данных (миграции, сиды, файлы файл ориентированных БД)lib/ - сюда принято помещать модули и классы напрямую не связанные с вашим проектомlog/ - сюда рельсы будут записывать свои логиpublic/ - все файлы в этой папке будут доступны пользователям/браузеруGemfile - здесь описаны все гемы от которых зависит проект.gitignore - описаны паттерны файлов которые git должен игнорировать
  • Пока мы ничего не поломали - самое время сделать комит. Первое что нам надо сделать это инициализировать gitрепозиторий. Делается это командой:gitinit
  • Посмотрим что у нас с деревомКак видно все файлы unstaged.
  • Добавим все файлы проекта (за исключением тех что попадают под описание .gitignore) в stagingarea.
  • Запускаем локальный сервер. смотрим браузер
  • Если сервер не запустится с такой ошибкой, отредактировать Gemfile.
  • УжесейчасможнопопробоватьзадеплоитьприложениенаХероку
  • Что такое Хероку?!Хероку себя определяет как облачная платформа приложений - новый способ создания и развертывания приложений.Википедия говорит что Хероку это облачная платформа как сервис, с поддержкой нескольких языков программирования.Для меня Хероку это найпростейшийдеплоймент, отсутствие необходимости управлять серверами, масштабирование одной командой.
  • Так как же деплоить на Хероку? Просто запушить код в репозиторий вашего приложения на Хероку. Afterpushколбэки настроят окружение, скомпилируют ассеты, запустят инстансы только что задеплоеного приложения.
  • У Хероку есть очень удобный CLI который устанавливается вместе с гемомheroku. Прямо сейчас мы его и установим:
  • GIT, RVM, FIRST HEROKU APP

    1. 1. LESSON 2RVM, GIT, RAILS, HEROKUPavel Tsiukhtsiayeugithub.com/paveltyk
    2. 2. TODO• Git • Install • Configure• RVM • Install RVM • Install Ruby • Create Gemset• Rails • Install • Generate project • First commit • Start server• Heroku • Install & Configure • Push Rails app to Heroku • Make it WORK• Tips & Tricks
    3. 3. Git :: install• $ sudo apt-get install git-core
    4. 4. Git :: configure• $ git config --global user.name "PavelT"• $ git config --global user.email paveltyk@gmail.comWhere does git store its settings?• /etc/gitconfig (--system)• ~/.gitconfig (--global)• .git/config
    5. 5. Git :: configure• $ git config --list• user.name=PavelT• user.email=paveltyk@gmail.com• color.ui=true• push.default=tracking• $ git config user.name• PavelT• At least have this 4
    6. 6. Git :: install and configure• Q&A?
    7. 7. RVM :: install• $ sudo apt-get install curl• $ curl –L https://get.rvm.io | bash –s stable• For RVM to work properly, you have to set the Run command as login shell checkbox at Edit / Profile Preferences / Title and Commands in Gnome terminal• More details here: https://rvm.io/integration/gnome-terminal
    8. 8. RVM :: install Ruby• $ rvm requirements• Requirements for Linux "Ubuntu 12.04.1 LTS”• ………• Additional Dependencies:• # For Ruby / Ruby HEAD (MRI, Rubinius, & REE), install the following: build-essential openssl libreadline6• ruby: /usr/bin/apt-get install libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion pkg-config
    9. 9. RVM :: install Ruby• $ sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion pkg-config
    10. 10. RVM :: install Ruby• $ rvm list known• # MRI Rubies• [ruby-]1.8.6[-p420]• ...• [ruby-]1.9.3[-p194]• ...• # Jruby• ...• $ rvm install 1.9.3
    11. 11. RVM :: gemset• $ rvm use 1.9.3• $ which ruby• /home/pavelt/.rvm/rubies/ruby-1.9.3-p194/bin/ruby• $ rvm gemset create first-app• $ rvm gemset use first-app• How to easily switch gemsets & Ruby versions [Tips & Tricks]
    12. 12. RVM• Q&A?
    13. 13. Rails :: install• $ gem install rails• Fetching: i18n-0.6.1.gem (100%)• Fetching: rails-3.2.8.gem (100%)• ...• 29 gems installed• Successfully installed i18n-0.6.1• ...• Installing ri documentation for i18n-0.6.1..• Installing RDoc documentation for rack-cache-1.2...• Ri and RDoc are slow [see Tips & Tricks]
    14. 14. Rails :: new app• $ rails new first-app• create README.rdoc• create Rakefile• ……• Fetching gem metadata from https://rubygems.org/.........• Using rake (0.9.2.2)• Using i18n (0.6.1)• …..• Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
    15. 15. Rails :: app skeleton (partial)• app/ - core application code (controllers, views, models…)• config/ - application configuration• db/ - DB related files (migrations, seeds, etc)• lib/ - library modules• log/ - application log files• public/ - publicly accessible data• Gemfile - app gem requirements• .gitignore – patterns for files that should be ignored by git
    16. 16. Git :: init repo & initial commit• $ cd first-app• $ git init• Initialized empty Git repository in /home/pavelt/projects/first-app/.git/• $ git commit --allow-empty -m Initial commit’• [master (root-commit) 6f32ce8] Initial commit
    17. 17. Git :: add files & commit• $ git status• # On branch master• # Untracked files:• # (use "git add <file>..." to include in what will be committed)• #• # .gitignore• # Gemfile• # Gemfile.lock• …….• nothing added to commit but untracked files present (use "git add" to track)
    18. 18. Git :: add files & commit• $ git add .• git commit - m ’Initial rails project’
    19. 19. Rails :: start server• rails s• => Booting WEBrick• => Rails 3.2.8 application starting in development on http://0.0.0.0:3000• => Call with -d to detach• => Ctrl-C to shutdown server• [2012-09-23 19:46:46] INFO WEBrick 1.3.1• [2012-09-23 19:46:46] INFO ruby 1.9.2 (2011-07-09) [x86_64-darwin11.2.0]• [2012-09-23 19:46:46] INFO WEBrick::HTTPServer#start: pid=32565 port=3000
    20. 20. Rails :: http://localhost:3000
    21. 21. Rails :: if rails server failed• If failed with:• home/pavelt/.rvm/gems/ruby-1.9.3-p194/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)• Uncomment therubyracer gem in ./Gemfile• bundle install• git add Gemfile*• git commit -m ‘Added gem therubyracer’
    22. 22. Heroku• What is Heroku?• Heroku is a cloud application platform – a new way of building and deploying web apps. (Heroku | About)• Heroku is a cloud platform as a service (PaaS) supporting several programming languages. (Wikipedia)• Heroku = Easy deployment• Heroku = No server managing• Heroku = Scale with 1 command• Heroku = Read-only file system
    23. 23. Heroku :: deployment• How to deploy to Heroku?• Simply push to master branch of your Heroku git repo• $ git push heroku master
    24. 24. Heroku :: install & configure• $ gem install heroku• Register at Heroku sign up page• https://api.heroku.com/signup• $ heroku login• Enter your Heroku credentials.• Email: paveltyk@gmail.com• Password (typing will be hidden):• Authentication successful.• More info: https://toolbelt.heroku.com
    25. 25. Heroku :: first app• $ heroku create pavelt-first-app• Creating pavelt-first-app... done, stack is cedar• http://pavelt-first-app.herokuapp.com/ | git@heroku.com:pavelt- first-app.git• Git remote heroku added• $ git remote -v• heroku git@heroku.com:pavelt-first-app.git (fetch)• heroku git@heroku.com:pavelt-first-app.git (push)
    26. 26. Heroku :: first app• Go to http://pavelt-first-app.herokuapp.com
    27. 27. Heroku :: first app• $ git push heroku master• The authenticity of host heroku.com (50.19.85.156) cant be established.• RSA key fingerprint is 8b:48:5e:67:0e:c9:16:47:32:f2:87:0c:1f:c8:60:ad.• Are you sure you want to continue connecting (yes/no)? yes• Warning: Permanently added heroku.com,50.19.85.156 (RSA) to the list of known hosts.• Permission denied (publickey).• fatal: The remote end hung up unexpectedly
    28. 28. Heroku :: first app• $ heroku keys:add• Could not find an existing public key.• Would you like to generate one? [Yn] y• Generating new SSH public key.• Uploading SSH public key /home/pavelt/.ssh/id_rsa.pub... done• $ git push heroku master
    29. 29. Heroku :: first app• Counting objects: 73, done.• Compressing objects: 100% (58/58), done.• ….• -----> Heroku receiving push• -----> Ruby/Rails app detected• -----> Installing dependencies using Bundler version 1.2.0• …• Installing sqlite3 (1.3.6) with native extensions• Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.• Failed to install gems via Bundler.• Detected sqlite3 gem which is not supported on Heroku.• http://devcenter.heroku.com/articles/how-do-i-use-sqlite3-for-development• Heroku push rejected, failed to compile Ruby/rails app
    30. 30. Heroku :: first app• Remove `gem ‘sqlite3’` line from ./Gemfile, update bundle and commit• $ bundle install• git commit -am ‘Removed SQLite3 gem’• $ git push heroku master• Counting objects: 73, done.• ….• -----> Heroku receiving push• -----> Ruby/Rails app detected• -----> Installing dependencies using Bundler version 1.2.0• …• Your bundle is complete! It was installed into ./vendor/bundle• …• -----> Writing config/database.yml to read from DATABASE_URL• -----> Preparing app for Rails asset pipeline• -----> Launching... done, v7• http://pavelt-first-app.herokuapp.com deployed to Heroku
    31. 31. Heroku• Q&A?
    32. 32. Tips & Tricks :: .rvmrc• Automatically change Ruby version and Gemset• ./.rvmrc• rvm use 1.9.3@first-app --create
    33. 33. Tips & Tricks :: disable Ri & RDoc• How to disable Ri and Rdoc?• ~/.gemrc• install: --no-ri --no-rdoc• update: --no-ri --no-rdoc
    34. 34. Tips & Tricks :: informative prompt• How to make prompt more informative?• ~/.bashrc• export GIT_PS1_SHOWDIRTYSTATE=true• export GIT_PS1_SHOWUNTRACKEDFILES=true• export GIT_PS1_SHOWSTASHSTATE=true• PS1=[$(~/.rvm/bin/rvm-prompt)]u:W[$(__git_ps1 "%s")]

    ×