Шаг 1. Настройка среды разработки для разработки на языке Ruby
Чтобы разработать приложение с помощью драйвера Ruby для SQL Server, необходимо настроить среду разработки, учитывая необходимые условия.
Драйвер Ruby использует протокол TDS, включенный по умолчанию в SQL Server и Базу данных SQL Azure. Дополнительная настройка не требуется.
Windows
- Скачайте установщик Ruby
Если на вашем компьютере не установлен язык Ruby, установите его. Для новых пользователей Ruby рекомендуется использовать установщики Ruby 2.2.X, которые предоставляют стабильный язык и обширный список совместимых и обновленных пакетов (gems). Перейдите на страницу загрузки Ruby и скачайте соответствующий установщик 2.1.x. Например, если вы используете 64-разрядный компьютер, скачайте установщик Ruby 2.1.6 (x64). - Установите Ruby
Завершив скачивание установщика, выполните следующие шаги:
а. Дважды щелкните файл установщика, чтобы запустить его.
b. Выберите язык и примите условия.
c. На экране параметров установите флажки рядом с параметром «Добавить исполняемые файлы Ruby в путь» и «Связать файлы .rb и .rbw с этой установкой Ruby». - Скачайте набор разработки Ruby
Скачайте набор разработки со страницы RubyInstaller - Установите набор разработки Ruby
После завершения загрузки выполните следующие действия:
а. Дважды щелкните файл. Вам будет предложено извлечь файлы.
b. Нажмите кнопку «. » и выберите «C:\DevKit». Вероятно, вам потребуется сначала создать эту папку, нажав кнопку «Создать папку».
c. Нажмите кнопку «ОК», а затем «Извлечь», чтобы извлечь файлы. - Откройте cmd.exe
- Инициализируйте набор разработки Ruby
> chdir C:\DevKit > ruby dk.rb init > ruby dk.rb install
> gem inst tiny_tds
Ubuntu Linux
- Откройте терминал
- Установите диспетчер версий Ruby ( rvm ) и предварительные требования
> sudo apt-get --assume-yes update > command curl -sSL https://rvm.io/mpapis.asc | gpg --import - > curl -L https://get.rvm.io | bash -s stable > source ~/.rvm/scripts/rvm
- Установите Ruby с помощью rvm
Например, установите версию Ruby 2.3.0:
> rvm install 2.3.0 > rvm use 2.3.0 --default > ruby -v
Убедитесь, что выходные данные последней команды показывают, что вы используете версию 2.3.0.
> sudo apt-get --assume-yes install freetds-dev freetds-bin
> gem install tiny_tds
macOS
Примечание. В macOS уже установлен Ruby, так как операционная система имеет зависимость.
> ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
> brew install FreeTDS
> gem install tiny_tds
Установка Ruby и настройка локальной среды разработки в Windows 10
Ruby – это динамический язык программирования, в котором можно написать что угодно: от простых скриптов до игр и веб-приложений. Ruby появился в Японии в 1993 году, но только в 2005 году он стал популярным языком для разработки на стороне сервера. Ruby прост в использовании и с ним легко работать даже новичкам, но он достаточно мощный, чтобы создавать сложные системы. Это отличный выбор для начинающих и опытных разработчиков.
Существует много способов установки Ruby в Windows. Microsoft рекомендует использовать для разработки Ruby Windows Subsystem for Linux (WSL) и Bash. WSL – это функция Windows 10, которая позволяет запускать инструменты командной строки Linux в Windows. Многие библиотеки Ruby предназначены для работы в Linux, и при использовании их в Windows могут возникать проблемы. Компания Microsoft сотрудничает с Linux, чтобы разрешить встроенную поддержку оболочки Bash и инструментов командной строки Linux для решения проблем совместимости Ruby и Windows. Установив Bash и WSL, вы сможете редактировать файлы с помощью инструментов Windows, а для работы Ruby и связанных с ним библиотек использовать Bash.
Данное руководство научит настраивать среду разработки Ruby на локальной машине Windows с помощью командной строки. Для тестирования среды будет создана простая программа Ruby.
Требования
- Машина Windows 10.
- Creators Update.
- Права администратора.
1: Установка Bash в Windows
Для установки Ruby будет использована командная строка. Командная строка представляет собой неграфический способ взаимодействия с компьютером. Вместо нажатия кнопок с помощью мыши вы вводите команды в виде текста и получаете обратную связь опять же в виде текста. Командная строка, также известная как оболочка, позволяет вам автоматизировать многие рутинные задачи и является важным инструментом для разработчиков программного обеспечения.
Windows предлагает два интерфейса командной строки «из коробки»: классическую командную строку и PowerShell. Для работы с Ruby рекомендуется установить строку Bash, популярный командный язык, которые используется в Linux и macOS.
Включите на машине Developer mode. Для этого откройте Settings, выберите Update & Security, в боковой панели найдите For developers. Затем выберите опцию Developer mode и подтвердите изменения.
Откройте Control Panel и выберите Programs → Turn Windows features on or off. В списке компонентов выберите опцию Windows Subsystem For Linux (Beta). Кликните OK и подождите, пока система установит дополнительные компоненты. Это может занять несколько минут.
После этого система предложит перезапустить компьютер. Сделайте это, чтобы обновить общесистемные файлы.
После перезагрузки откройте командную строку и введите:
Будет предложено установить Bash из Windows Store. Это бесплатно, загрузка занимает несколько минут.
This will install Ubuntu on Windows, distributed by Canonical
and licensed under its terms available here:
https://aka.ms/uowterms
Press «y» to continue: y
Downloading from the Windows Store. 100%
Extracting filesystem, this will take a few minutes.
После установки инсталлятор предложит создать пользователя:
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms.wslusers
Enter new UNIX username: 8host
Enter new UNIX password:
Укажите имя пользователя, нажмите Enter, введите пароль.
При вводе пароля символы не отображаются в окне терминала. Эта мера безопасности часто применяется при запросе паролей в командной строке. Вы не будете видеть символов, но система все равно будет фиксировать нажимаемые клавиши. Введите пароль и нажмите Enter, чтобы продолжить.
Оболочка Bash запустится. Командная строка будет выглядеть так:
Важно! Windows Subsystem for Linux имеет собственную файловую систему, которая хранится в скрытом файле в операционной системе. Microsoft не поддерживает доступ приложений Windows к этой файловой системе.
Однако все существующие файлы доступны в оболочке Bash. Например, все содержимое диска C можно найти в каталоге /mnt/c. Корпорация Microsoft рекомендует работать с файлами из этой папки. Таким образом, вы можете использовать инструменты Windows для работы с файлами и по-прежнему обращаться к ним из оболочки Bash. Доступ к файлам из других частей Windows Subsystem for Linux через программы Windows, таких как текстовые редакторы, файловые менеджеры и IDE, может привести к повреждению данных и не поддерживается.
2: Установка RVM и Ruby
RVM автоматизирует процесс установки среды Ruby в системе Ubuntu, на которой основана ваша установка Bash.
Самый быстрый способ установить Ruby с помощью RVM – запустить сценарий установки, размещенный на веб-сайте RVM.
Сначала используйте команду gpg, чтобы связаться с сервером открытых ключей и запросить ключ проекта RVM, который используется для подписи каждой версии RVM. Это позволяет подтвердить подлинность релиза RVM. В домашнем каталоге выполните следующую команду:
gpg —keyserver hkp://keys.gnupg.net —recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
Затем установите пакет gnupg2 (сценарий установки RVM будет использовать компоненты этого пакета для проверки релиза). Выполните эту команду:
sudo apt-get install gnupg2
Для установки программы нужно ввести пароль администратора. Однако при вводе пароля символы не отображаются в окне терминала. Эта мера безопасности часто применяется при запросе паролей в командной строке. Вы не будете видеть символов, но система все равно будет фиксировать нажимаемые клавиши. Введите пароль, нажмите Enter и программа будет установлена.
Затем используйте команду curl для загрузки сценария установки RVM с веб-сайта проекта. Обратный слеш в начале команды отключает все псевдонимы команды и запускает обычную команду curl.
\curl -sSL https://get.rvm.io -o rvm.sh
В команде использованы такие флаги:
- Флаг -s (–silent) отключает индикатор выполнения.
- Флаг -S (–show-error) включает поддержку сообщений об ошибках curl.
- Флаг -L (–location) включает обработку редиректов. Если сервер сообщает, что запрошенная страница переместилась на другой адрес, команда автоматически отправит запрос в новое местоположение.
После загрузки можно проверить содержимое сценария перед его запуском:
Используйте клавиши со стрелками для прокрутки файла. Чтобы вернуться в командную строку, нажмите q.
Убедившись, что сценарий не содержит ничего лишнего, выполните эту команду, чтобы установить последнюю стабильную версию RVM:
cat rvm.sh | bash -s stable
Сценарий создает в домашнем каталоге новый каталог под названием .rvm. Здесь будет установлен релиз Ruby и все связанные с ним компоненты, а также исполняемая программа rvm, которую вы используете для установки Ruby. Процесс установки изменит файл.bashrc и добавит папку .rvm/bin в переменную среды PATH. Это позволит запускать команду rvm.
Однако в текущей сессии команда rvm будет недоступна. Чтобы исправить это, введите:
Используйте rvm, чтобы установить последнюю версию Ruby.
rvm install ruby —default
Эта команда загрузит и установит Ruby и все сопутствующие компоненты и сделает эту версию Ruby версией по умолчанию, чтобы избежать конфликтов, если у вас уже установлена версия другая Ruby.
Searching for binary rubies, this might take some time.
Found remote file https://rvm_io.global.ssl.fastly.net/binaries/ubuntu/16.04/x86_64/ruby-2.4.0.tar.bz2
Если в системе не хватает важных зависимостей, инсталлятор загрузит и установит их. При этом он может запросить пароль пользователя Linux.
Checking requirements for ubuntu.
Installing requirements for ubuntu.
Updating system.
Installing required packages: gawk, libssl-dev, zlib1g-dev, libyaml-dev, libsqlite3-dev, sqlite3, autoconf, libgmp-dev, libgdbm-dev, libncurses5-dev, automake, libtool, bison, libffi-dev, libgmp-dev, libreadline6-dev.
Requirements installation successful.
Установив зависимости, RVM загрузит и установит Ruby.
ruby-2.4.0 — #configure
ruby-2.4.0 — #download
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 16.4M 100 16.4M 0 0 4828k 0 0:00:03 0:00:03 —:—:— 4829k
ruby-2.4.0 — #validate archive
ruby-2.4.0 — #extract
ruby-2.4.0 — #validate binary
ruby-2.4.0 — #setup
ruby-2.4.0 — #gemset created /home/brian/.rvm/gems/ruby-2.4.0@global
ruby-2.4.0 — #importing gemset /home/brian/.rvm/gemsets/global.gems.
ruby-2.4.0 — #generating global wrappers.
ruby-2.4.0 — #gemset created /home/brian/.rvm/gems/ruby-2.4.0
ruby-2.4.0 — #importing gemsetfile /home/brian/.rvm/gemsets/default.gems evaluated to empty gem list
ruby-2.4.0 — #generating default wrappers.
После выполнения сценария будет установлена последняя версия Ruby.
В дополнение к Ruby RVM устанавливает несколько сопутствующих инструментов: irb (интерактивная консоль Ruby), rake (программа для запуска сценариев автоматизации) и gem (упрощает установку и обновление библиотек Ruby, которые можно использовать в проектах).
Запросите версию Ruby:
ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
Важно! Чтобы менеджер RVM мог использовать эту версию Ruby при запуске сессий Bash, нужно запустить Bash как login shell. RVM нужен доступ к файлу .bash_profile, который вызывается только в login shell. Bash for Windows не запускает login shell по умолчанию, потому для работы с Ruby нужно открыть командную строку и запустить Bash с помощью команды:
Также вместо этого можно запускать следующую команду при каждом запуске Bash:
3: Создание простой программы Ruby
Чтобы убедиться, что среда работает, напишите простую программу «Hello, World».
Создайте файл hello.rb:
Введите в него следующий код:
puts «Hello, World!»
Нажмите Y, чтобы сохранить файл.
Программа выведет на экран следующую фразу:
Эта простая программа подтверждает, что среда разработки настроена правильно.
Теперь локальная машина готова к разработке программного обеспечения.
Вы можете использовать эту среду для изучения Ruby и создания более сложных и интересных проектов.
Установка Ruby on Rails на Windows
Вопреки SEO-шному заголовку, статья затрагивает более обширную тему: разворачивание и настройку полноценного Ubuntu сервера, на котором будут запускаться все ваши Ruby приложения (в том числе Ruby on Rails), устанавливаться джемы и дополнительная инфраструктура (например, базы данных), без которой сложно представить современное веб-приложение.
При этом, благодаря тому, что сервер будет работать в отдельной виртуальной машине, вам не придется отказываться от родной Windows, освоенного вдоль и поперек Notepad++ и обожаемого Дьябло 3.
Почему так сложно
Почему Ubuntu (Linux)
Читатель, уже немного знакомый с Ruby, наверняка спросит «а как же RubyInstaller?»
Без сомнения, простые инсталляторы вроде RailsInstaller позволяют поиграться с irb и запустить свой первый Магазин-на-Рельсах практически мгновенно. Если закрыть глаза на то, что консоль Windows не способна отображать цвета, а вместо кириллицы выводит знаки вопроса, и что некоторые джемы работают через пень-колоду, это неплохой вариант для тех, кто хочет «пощупать».
Другое дело, если вы всерьез намереваетесь посвятить себя веб-разработке. Рано или поздно придется столкнуться с выкладкой приложения на рабочий сервер, которые — сюрприз! — поголовно работают на Ubuntu/Debian и прочих линуксах. Поэтому в ваших же интересах, чтобы эта встреча случилась рано. Хотя Rails разработчик не обязан быть админом, на практике выходит, что настройкой сервера и поднятием Rails окружения занимается именно он. И уж если на то пошло, нельзя написать эффективное приложение, не понимая, как устроена операционная система, в которой оно запускается.
Если вы верстаете под Ruby on Rails, крайне важно иметь идентичное с остальной командой окружение. Поверьте, когда разработчик в разгар сдачи работы заказчику добавляет в проект новый джем, который не устанавливается на вашей машине, а вам еще переверстывать полмакета, но без злополучного джема даже сервер не запустить — это очень неприятно и для вас, и для разработчика, которому придется эту проблему решать. Имея же у себя на машине Linux-based сервер, вы можете рассчитывать на то, что всё, запускающееся «у них», гарантированно установится и запустится у вас.
Почему Windows
Конечно, не стоит тут же сносить под корень Windows в надежде, что прогрессивные десктопные дистрибутивы, вроде Ubuntu или Linux Mint, смогут заменить годами настраиваемую под себя систему и парк привычных приложений. К сожалению, даже свежие версии Ubuntu приходится «допиливать напильником» (особенно это касается установок на ноутбуки). Постигая тонкости Linux философии и сражаясь с аппаратными и интерфейсными проблемами, вы рискуете потерять интерес к тому, из-за чего всё началось,— Ruby.
Mac OS X — совершенно иная история, и если у вас есть деньги на железо от Apple, берите, не раздумывая.
Именно поэтому вариант с виртуальной машиной представляется наиболее разумным: вы ничем не жертвуете, не рискуете потерять информацию и продолжаете использовать в работе знакомые инструменты.
Недостатки
Виртуальная машина требует гораздо больше ресурсов, чем Ruby интерпретатор, запущенный непосредственно из-под Windows. Так, ко времени первого запуска Rails проекта придется приплюсовать время старта самой операционной системы (Ubuntu), это же касается объема занимаемой оперативной памяти: ≈400 Mb против 70-80.
Будучи запущенной, виртуальная машина никак не повлияет на время последующих запусков/ перезагрузки Rails сервера.
Однако, для нынешнего поколения компьютеров такие издержки — уже не что-то запредельное, тогда как преимущества подобного подхода очевидны.
Запуск сервера с помощью Vagrant
Давайте вначале разберемся, к чему мы в итоге должны прийти. Наша цель — установка и настройка виртуальной машины, внутри которой будет крутиться серверный Linux дистрибутив (конкретнее, Ubuntu 12.04 Server).
На сервере будет расшарена папка, поэтому все сохраненные в ней файлы будут одновременно доступны и для редактирования в Windows, и для запуска интерпретатором Ruby в Linux.
Для управления сервером будет использоваться удаленный доступ через SSH с помощью клиента PuTTY. Визуально консоль PuTTY ничем не будет отличаться от родной командной строки Windows, но все команды, конечно же, будут исполняться на стороне сервера, а значит, придется изучить несколько расхожих, специфичных для Linux, команд.
Несколько слов о том, что такое SSH, чуть ниже.
Наконец, чтобы видеть результаты работы, порт 3000 на сервере (который по умолчанию использует Rails) доступен в Windows под тем же номером. Таким образом, зайдя в браузере по локальному адресу http://127.0.0.1:3000, вы на самом деле будете обращаться к приложению, запущенному в этот момент на сервере в виртуальной машине.
Выглядит это примерно так:

VirtualBox и Vagrant
Приятная новость: бóльшая часть работы по установке и настройке сервера уже сделана, вам достаточно лишь скачать уже готовый образ виртуальной машины и запустить его.
- Копия виртуальной машины будет работать под управлением VirtualBox, поэтому для начала нужно убедиться, что у вас установлена версия не ниже 4.1 или установить ее.
- Следующий шаг — установка консольной программы Vagrant. Он (Vagrant) займется распаковкой образа виртуальной машины, будет управлять ее запуском и остановкой, а также позволит выполнить тонкую настройку с помощью файла Vagrantfile . Собственно, вам никто не запрещает делать запуск и настройку вручную, Vagrant — просто удобная оболочка для управления VirtualBox.
- Скачиваете на жесткий диск т. н. бокс (box), который подготовил я. Vagrant box — не что иное, как архив с образом уже созданной виртуальной машины.
- Включение бокса в список доступных Vagrant’у. Эта операция выполняется единожды (если быть точнее, каждый раз, когда вы скачиваете новый бокс). Для этого нужно в консоли (командной строке) Windows набрать vagrant box add ruby path\to\box . Ruby — произвольное имя, которое вы даете боксу, затем идет полный путь до ранее загруженного вами файла.
- Поскольку вам часто придется открывать консоль с нужной текущей папкой, это удобнее делать прямо из проводника через контекстное меню папки. Для этого нужно добавить в него пункт «Открыть консоль здесь».
- Создаете папку, в которой будут храниться ваши Rails проекты (содержимое этой папки будет доступно серверу в запущенной виртуальной машине). Находясь в этой папке, выполняете в консоли vagrant init ruby . Vagrant создаст в папке шаблонный файл настроек Vagrantfile , его пока не трогаем.
- Первый запуск виртуальной машины. Продолжая находиться в папке для будущих проектов, в консоли выполняете vagrant up . В этот момент Vagrant находит Vagrantfile и проверяет, существует ли связанная с этой папкой виртуальная папка, и если нет (а так оно и есть), то клонирует указанный в Vagrantfile базовый бокс и запускает эту копию. Такой подход дает возможность создать несколько независимых друг от друга (и по-разному настроенных) виртуальных машин. Но самое главное, пожалуй, это то, что вы можете без опаски исследовать и настраивать сервер: любые фатальные действия легко исправить, просто удалив «испорченную» машину и создав ее заново из базового бокса.
Второй и последующий запуски выполняются аналогично с помощью vagrant up , но они происходят намного быстрее (используется уже скопированная виртуальная машина).
Обычно после запуска виртуальная машина висит в фоновом режиме вплоть до перезагрузки/выключения Windows, но если вдруг понадобится освободить занимаемую оперативную память, для останова используйте команду vagrant halt .
PuTTY
На запущенном вами сервере уже создан один пользователь c именем vagrant. Чтобы действовать от его имени и управлять системой, вы будете использовать популярный SSH клиент для Windows — PuTTY.
Я выполнил все необходимые настройки клиента, вам остается только скачать его. Распакуйте архив в любую папку и запустите файл ruby-bootstrap.reg , чтобы импортировать настройки в реестр.
После этого достаточно запустить putty.exe , загрузить сессию ruby-bootstrap и нажать Open. Вы будете успешно аутентифицированы на сервере под учетной записью vagrant и можете выполнять команды. Например, запустить интерактивный интерпретатор Ruby:
Или можно создать ярлык для putty.exe , указав в командной строке -load «ruby-bootstrap» .
Тут и далее команды в серверной консоли будут записываться полностью, с приглашением, чтобы не путать с командами для Windows консоли.
vagrant@precise32:~$ irb 1.9.3p194 :001 > 1 + 1 => 2
Для нормального отображения текста в консоли очень рекомендую скачать и установить шрифт DejaVu Sans Mono.
Первый проект Ruby on Rails
На сервере расшареной является корневая папка vagrant , поэтому все файлы, которые вы хотите редактировать «снаружи», нужно создавать там. Последовательность для создания тестового проекта Ruby on Rails может выглядеть так:
Более подробно о файловой системе чуть ниже.
vagrant@precise32:~$ cd /vagrant/ vagrant@precise32:/vagrant$ rails new my-project vagrant@precise32:/vagrant$ cd my-project vagrant@precise32:/vagrant/my-project$ rails generate scaffold User name vagrant@precise32:/vagrant/my-project$ rake db:migrate vagrant@precise32:/vagrant/my-project$ rails server
В первый раз, конечно, придется еще и установить сам джем командой gem install rails
После этого по адресу http://127.0.0.1:3000/users должна быть видна шаблонная страница для просмотра и редактирования пользователей, а в папке Windows, где была выполнена команда vagrant up , должна появиться подпапка my-project .
Настройка Git и SSH
Каждый уважающий свой труд разработчик работает с кодом только через систему контроля версий. В Ruby сообществе в 99% случаев для этого используется Git, и если не хотите быть белой вороной, придется его установить и освоить.
TODO статья о Git
Поскольку рабочие файлы фактически будут доступны обеим операционным системам, выбор, где настраивать и, собственно, работать с Git, за вами. По собственному опыту могу сказать, что просматривать изменения в файлах удобнее в графическом клиенте, а не в консоли, поэтому лучше это всё-таки делать в Windows.
Для этого нужно установить msysgit (настройки по умолчанию) и сохранить в настройках Git информацию о себе, создав в корне вашей домашней директории файл .gitconfig (именно с точкой в начале) примерно такого содержания:
[user] name = Flash Gordon email = flash@gordon.com
Эта персональная информация сохраняется с каждым изменением (коммитом), вносимым в проект, и по сути является вашей подписью.
Что касается графических клиентов, если ваш редактор — Rubymine, в нем уже есть замечательная интеграция с Git, иначе могу порекомендовать установить TurtoiseGit (внедряется в проводник).
Онлайн-репозитории
Следующим шагом, еслы вы планируете использовать Github или BitBucket, будет генерация SSH ключей. Через Пуск -> Программы -> Git -> Git Bash открываете консоль и там вводите (со своим e-mail, конечно же):
ssh-keygen -t rsa -C "flash@gordon.com"
Соглашаетесь с папкой по умолчанию (жмете на ввод), затем еще дважды на ввод для создания пустого пароля для секретного ключа. После этого переходите в созданную генератором папку ( .ssh/ в корне вашей домашней директории) и копируете в буфер обмена содержимое публичного ключа id_rsa.pub (про себя отмечаем, что рядом лежит секретный ключ id_rsa , вот его как раз нужно бережно хранить). Скопированный текст нужно вставить в разделе профиля Github или Bitbucket, который так и называется — SSH keys.
Если одолевает страх, что секретным ключом в ваше отсутствие воспользуются близкие, тогда, конечно, пароль задать надо 🙂
Heroku
Если планируете использовать Heroku, то эту же пару ключей нужно скопировать на Ubuntu сервер (т. к. консольная утилита heroku будет установлена именно там). Одинаковая пара на обеих машинах нужна, потому что отправка кода на Heroku будет происходить из Windows через Git, а запуск обслуживающих команд (например, миграции) — на Ubuntu, при этом в обоих случаях будет проводиться проверка подлинности, и конечно же, опознать вас должно как одну и ту же учетную запись.
Для этого, находясь в Windows, нужно скопировать .ssh/ вместе с ключами в расшареную с сервером папку, затем подключиться к запущенной виртуальной машине через PuTTY и там скопировать оба ключа в такую же папку .ssh/ , только уже в домашней директории пользователя vagrant (под которым вы, собственно, и работаете):
vagrant@precise32:~$ cd /vagrant/ vagrant@precise32:/vagrant$ cp -r .ssh /home/vagrant vagrant@precise32:/vagrant$ gem install heroku vagrant@precise32:/vagrant$ heroku keys:add
Последняя команда запросит у вас данные, использованные при регистрации на Heroku (с паролем все ок).
RVM
На сервере уже установлен Ruby MRI 1.9.3 через RVM. Последний позволяет держать на машине несколько версий интерпретатора Ruby и переключаться между ними. Допустим, вам понадобится работать со старым проектом на Rails 2.3.X, тогда, чтобы установить версию Ruby 1.8:
vagrant@precise32:~$ rvm install 1.8.7
После этого достаточно поместить в папку с проектом файл .rvmrc содержания:
rvm use 1.8.7
и каждый раз, когда вы будете переходить в эту папку в серверной консоли (а вам придется это сделать, хотя бы для того, чтобы запустить rails server ), RVM будет менять текущую версию Ruby на 1.8.7.
Несмотря на то, что RVM поддерживает т. н. gemset’ы, я не рекомендую их использовать. Лучше полагаться на Bundler, тем более, что на сервере уже включена его интеграция с Rubygems, что позволяет запускать исполняемые файлы указанной в Gemfile версии без префикса bundle exec .
Что сразу понадобится в Linux
Консоль
Командная строка для человека, привыкшего к мышке-менюшкам, поначалу кажется настоящим адом. Непонятно, что туда можно вводить вообще, команды (и их параметры!) нужно запоминать (или лезть в справочник), и каждый раз набирать их на клавиатуре. Ниже — самые очевидные вещи, знание которых спасет вам тонну времени и нервов.
Тем не менее консоль на сервере — самый простой и в то же время очень гибкий способ автоматизировать рутинные процедуры.
История команд
Перемещаться по ней можно с помощью курсорных клавиш вверх/вниз. Например, вы опечатались и набрали вместо rails server :
vagrant@precise32:/vagrant/my-shop$ rals server
на что получите резонный ответ «не знаю такой команды» и пустое приглашение:
rals: command not found vagrant@precise32:/vagrant/my-shop$
Вместо того, чтобы вводить всё по-новой, нажмите клавишу вверх и исправьте в подставленной команде опечатку.
Автодополнение
Для длинных команд очень полезным оказывается автодополнение по клавише Tab после того, как набрано несколько начальных символов. Кроме названий исполняемых файлов дополняются имена папок и файлов, и это очень спасает, когда в качестве параметра нужно указать полный путь к файлу.
Если несколько команд начинаются одинаково (такое случается нередко), а набранных букв недостаточно для однозначной подстановки, повторное нажатие на Tab покажет все возможные варианты.
Например, в текущей папке лежат файлы user.rb и uploader.rb , и вы хотите запустить последний в интерпретаторе Ruby. Тогда достаточно набрать в консоли:
vagrant@precise32:/vagrant/utils$ ruby up
По понятным причинам команды ruby u будет недостаточно.
нажать Tab (команда автоматически развернется до ruby uploader.rb ), а затем на ввод.
Ввод паролей
Пароли при вводе не маскируются звездочками, как в Windows, они вообще не отображаются. Это нормально, нужно просто ввести нужную фразу и нажать на ввод.
Ctrl+C Ctrl+V
Вставка из буфера обмена выполняется правой клавишей мыши, а чтобы скопировать туда текст, нужно просто выделить его мышью.
Запуск нескольких программ
По умолчанию программы (процессы), запущенные в консоли (терминале), привязываются к нему. С одной стороны это удобно, т. к. позволяет завершать процесс с помощью комбинации клавиш Ctrl+C (или Ctrl+D), все сообщения выводятся в этот же терминал (например, логи Rails сервера). С другой стороны — не очень удобно, потому что запущенное приложение блокирует такой терминал и никаких других команд уже не введешь.
Обойти это ограничение просто: запуском еще одной консоли, в данном случае еще одного экземпляра PuTTY. Если вас раздражает куча открытых окон, обратите внимание на SuperPutty, который добавляет поддержку табов.
Файловая система
В Linux у файлового дерева может быть только один корень (он обозначается ), тогда как в Windows их может быть несколько, в зависимости от количества разделов: диски C:\ , D:\ и т. д. Поскольку корень один, то все остальные разделы и устройства (например, DVD-Rom) видны как обычные папки, подключенные к нему (названия и конкретное месторасположение целиком на совести пользователя).
Разделителем в файловых путях является прямая косая черта ( / ), например
/vagrant/projects/my-shop/app/models/user.rb
Если путь начинается ею (а значит — с корня), то он является абсолютным, иначе — относительным от текущей папки. Иногда для запуска исполнительных файлов требуется принудительно указать системе искать файл относительно текущего местоположения, тогда путь начинают с точки (например, ./bin/start ).
Если точкой можно заменить текующую папку, то двоеточием ( .. ) — родительскую, например, путь ../recipes означает: чтобы найти папку recipes , нужно подняться на уровень выше текущей.
Текущая папка всегда отображается в консоли после имени пользователя. По умолчанию (при открытии нового терминала) это его домашняя директория (в вашей виртуальной машине это /home/vagrant ), для которой имеется краткий синоним: .
Чтобы сменить текущую директорию, используется команда cd (change directory), она может принимать в качестве аргумента как абсолютный, так и относительный путь. Допустим, в домашней директории пользователя vagrant есть две папки: my_music и my_books , тогда:
Не забывайте про автодополнение по Tab.
vagrant@precise32:~$ cd my_music vagrant@precise32:~/my_music$ cd vagrant@precise32:~$ cd /home/vagrant/my_books vagrant@precise32:~/my_books$ cd .. vagrant@precise32:~$
cd , вызванная без аргумента, всегда перемещает в домашнюю директорию.
Чтобы просмотреть содержимое папки, используют команду ls (list). Если вызвать ее без аргументов, увидите, что находится в текущей папке, иначе — в том месте, которое указали. Поскольку в Linux файлы и папки, начинающиеся с точки, считаются скрытыми (например, .ssh ), просмотреть всё содержимое папки помогает вызов с ключом a (all): ls -a .
Администраторские права
Как и в любой другой операционной системе, некоторые важные действия (например, установку и удаление программ глобально, на уровне системы) могут выполнять только пользователи с администраторскими правами. В Linux в таком случае обычно подразумевают пользователя с неограниченными правами (root user или superuser), однако, входить в систему и постоянно работать под этой учетной записью крайне не рекомендуется из соображений безопасности.
Вместо этого пользователю vagrant (под которым вы работаете в виртуальной машине) разрешено в момент выполнения любой команды притвориться администратором с помощью префикс-команды sudo . Например, чтобы увидеть содержимое папки lost+found , недостаточно набрать ls /lost+found , нужно в этот момент быть суперпользователем: sudo ls /lost+found .
Как правило, в lost+found всё равно пусто :), туда система восстановливает поврежденные после некорректного завершения работы файлы.
После ввода такой команды запрашивается пароль того пользователя, который ее выполняет (а не того, кем он хочет стать), в вашем случае — пользователя vagrant (пароль — vagrant). В данной системе запрос пароля отключен (что категорически запрещено делать на реальных серверах по понятным причинам), но это не значит, что sudo достаточно ввести только для первой команды и «переключиться в режим бога», каждая команда, требующая администраторских прав, должна начинаться с sudo .
Редактирование файлов
Иногда вам потребуется отредактировать файлы, которые лежат вне расшаренной папки /vagrant . Вместо того, чтобы копировать их в расшаренную папку, редактировать там из-под Windows и копировать обратно, гораздо проще использовать консольные текстовые редакторы.
В Ubuntu для этого можно использовать nano или vim . Первый практически ничем не отличается от стандартного Блокнота, из второго нужно уметь выйти 🙂
Обе команды (редакторов) принимают в качестве аргумента полный или относительный путь к файлу. Если он существует, то будет открыт для правки, иначе — будет создан во время первого сохранения, например:
vagrant@precise32:~$ nano notes
Для правки/создания некоторых системных файлов может понадобиться sudo .
vagrant@precise32:~$ vim hello.rb
Редактор Nano проще для понимания тем, что открывается сразу в привычном режиме редактирования. Внизу видны подсказки с командами, где ^ обозначает клавишу Ctrl. Таким образом, сохранить изменения можно с помощью Ctrl+O, выйти — Ctrl+X.
Vim горазде сложнее, и я не рекомендую его для новичка, но может так статься, что система принудительно откроет файл именно в нем. В этом случае нужно знать, что переход в режим редактирования выполняется клавишей i. После того, как вы внесли правки, нужно выйти из режима редактирования с помощью клавиши Esc, перейти в командный режим нажатием клавиши : (Shift+;) и ввести wq (write quit — сохранить и выйти). Чтобы выйти без сохранения, в командном режиме нужно набрать q!
Установка программ
SSH
SSH — это название протокола для безопасного (зашифрованного) соединения двух машин по сети. Обычно под этим подразумевается удаленный доступ к консоли (оболочке, shell; собственно, отсюда и название — Secure SHell) компьютера, но этим возможности SSH не ограничиваются. Например, он же может использоваться для безопасного (с точки зрения перехвата злоумышленником) копирования файлов между двумя машинами; Github, BitBucket, Heroku используют SSH для проверки подлинности пользователя.
Пару в SSH соединении составляют сервер и клиент. На сервере имеется учетная запись (которая обладает определенным набором прав), клиент же проходит процедуру опознания (аутентификации), после чего действует от имени этой учетной записи.
SSH использует аутентификацию на базе системы шифрования с открытым ключом. Клиент предварительно создает особую пару «секретный ключ — публичный ключ», после чего связывает публичный ключ со своей учетной записью на сервере. Эта привязка выполняется не через SSH, например, в случае с Github нужно зайти в браузере на страницу своего профиля и загрузить там содержание своего публичного ключа.
Пара «секретный ключ — публичный ключ» обладает несколькими важными свойствами. Во-первых, она всегда уникальна. Во-вторых, имея на руках зашифрованное публичным ключом сообщение, его практически невозможно расшифровать, даже получив доступ к публичному ключу. Однако, хозяин секретного ключа может выполнить обратное преобразование. На основании этого сервер в процессе «предварительного общения» с клиентом может сделать вывод, что удаленная машина, от которой он получает ответы, действительно та, за кого себя выдает.
Конечно же, у злоумышленника всегда остается метод грубого подбора, другое дело, сколько компьютеро-лет это займет.
Надежность такой системы в том, что секретный ключ не хранится на сервере и не передается в процессе коммуникации с клиентом. Более того, при создании пары генератор ключей позволяет зашифровать и сам секретный ключ. С одной стороны, это обезопасит от возможной кражи секретного ключа, с другой — чтобы SSH клиент смог использовать этот ключ, хозяину придется вводить к нему пароль (passphrase) во время установления сессии. Если уверены, что кроме вас секретным ключом никто не может воспользоваться, пароль для него можно оставить пустым.
Безопасность
Берегите свои секретные ключи как зеницу ока. При малейшем подозрении, что они попали в чужие руки, меняйте публичные ключи на всех серверах (точно так же, как меняете дверной замок, когда теряете ключ).
При этом учтите, что по умолчанию связь между PuTTY и запущенными виртуальными машинами происходит через небезопасную пару ключей, которая создана разработчиками Vagrant. Небезопасна она именно потому, что секретный ключ общедоступен (и, теоретически, может быть использован злоумышленником для доступа к вашей виртуальной машине). Поэтому, если вы планируете работать с важной информацией, нужно убедиться, что порт 2222 недоступен извне, или принять меры по его закрытию (фаервол).
В качестве альтернативной защиты можно заменить пару ключей на свою, хотя это потребует больше телодвижений, чем с портом.
Установка Ruby on Rails под Windows
Заинтересовал меня Rails. Купил пару книг, прочитал… достаточно чтобы, зачесались руки и пришло время ставить сабж. И приступать… хотя бы к экспериментам.
Задача: поставить Rails под Windows 7 (не спрашивайте меня почему) и запустить сервер.
Оказалось — это квест. Пары щелчков мышью недостаточно. Конечно, если не использовать Railsinstaller, на что мне правильно намекнули в комментариях (спасибо, dreamfall).
Несколько же часов моих поисков, завершившихся таки полной и безоговорочной инсталляцией, под катом.
1. Ставим Ruby. Строго отсюда rubyinstaller.org/downloads. Ибо тут он собран под gcc MinGW 32, который будет использоваться и для сборки ruby-модулей
1.1 Нам понадобиться версия 187. Версия 192 треует более мощного шаманства, на которое у меня маны не хватило.
1.2 Ставим Development Kit (он нам понадобиться, чтобы собрать Rails), распаковывая прямо поверх каталога Ruby (если ставили по умолчанию — это C:\Ruby187, в дальнейшем обзовем его $Ruby)
1.3 Можно заодно и документацию по Ruby скачать
2. Нам понадобиться SQLite www.sqlite.org. Архив c dll-кой и def файлом распаковываем прямо в каталог $Ruby\bin. Это кстати был первый сюрприз (раньше RDBMS «по умолчанию» был mySQL)
3. Запускаем Comand Prompt wiht Ruby (вы найдете его в start-меню windows)
4. В comand prompt ставим модули:
4.1. gem install sqlite3-ruby — SQLite
4.2. gem install rails — собственно сами «рельсы». Возможно, что установка прервется с ошибкой, в этом случае повторяем команду
4.3. Даже если ошибки не случилось, всё равно потребуется шаманство. Ибо, на каждый наш чих, будет вылезать вот такое непотребство:
Invalid gemspec in [C:/Ruby187/lib/ruby/gems/1.8/specifications/json-1.6.1.gemspec]: invalid date format in specification: «2011-09-18 00:00:00.000000000Z».
Это ошибка связанная с форматом даты. Лечится просто. Переходим в каталог $Ruby\lib\ruby\gems\1.8\specifications и в файлах «с ошибкой» меняем строчку
s.date = %q
на
s.date = %q
4.4. Для успокоения совести gem update rails —include-dependencies
5. Создаем тестовое приложение. Там же, в Command prompt
5.1 Переходим в каталог «для игр» например cd \test (или mkdir \test;cd \test — если такого каталога нет)
5.2 Создаем приложение rails new hello. Второй сюрприз — в книжках ничего не говорилось про «new».
5.3 Запускаем наше приложение. cd hello; rails server . И последний сюрприз — в тех же книжках ссылка на несуществующий больше скрипт rails server/script
5.4 по адресу localhost:3000 внезапно мы обнаруживаем наше долгожданное приложение.
Продолжение воспоследует, если по мере углубления обнаружатся еще подводные камни.