9. 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
16. 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]
17. 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.
18. 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
22. 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
24. 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’
25.
26. 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
27. Heroku :: deployment
• How to deploy to Heroku?
• Simply push to master branch of your Heroku git repo
• $ git push heroku master
28. 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
30. Heroku :: first app
• Go to http://pavelt-first-app.herokuapp.com
31. Heroku :: first app
• $ git push heroku master
• The authenticity of host 'heroku.com (50.19.85.156)' can't 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
32. 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
33. 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
34. 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
36. Tips & Tricks :: .rvmrc
• Automatically change Ruby version and Gemset
• ./.rvmrc
• rvm use 1.9.3@first-app --create
37. Tips & Tricks :: disable Ri & RDoc
• How to disable Ri and Rdoc?
• ~/.gemrc
• install: --no-ri --no-rdoc
• update: --no-ri --no-rdoc
38. 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")] '
Hinweis der Redaktion
Очень многое в экосистеме 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. Прямо сейчас мы его и установим: