В Части 1 я выполнил минимальные шаги, необходимые для создания нового приложения Rails, работающего в подсистеме Windows 10 для Linux. Теперь я хочу посмотреть, смогу ли я запустить более сложное приложение, чтобы увидеть, насколько на самом деле стабилен WSL. Я также рассмотрю настройку установки по умолчанию Bash на Ubuntu в Windows, чтобы сделать ее немного удобнее в использовании. Давайте приступим!

Тестирование полноценного приложения Rails

Я клонировал репозиторий рабочего проекта, чтобы использовать его в качестве примера типичного современного внутреннего приложения Rails. Рассматриваемое приложение имеет приличный размер, где-то около 300 конечных точек, а набор тестов RSpec содержит более 5000 спецификаций. Он зависит от многих часто используемых сервисов (например, PostgreSQL, Redis, ElasticSearch, Devise, CarrierWave, Sidekiq), поэтому он должен быть хорошим индикатором того, подходит ли WSL для выполнения реальной работы.

Вот краткий обзор того, что я сделал для его настройки:

  • Настроить Git и добавить SSH-ключ для Github, чтобы не потерять рассудок.
  • Установите PostgreSQL (я не смог заставить работать сборку Linux, но родная версия Windows подойдет, если вы настроите в соответствии с этим комментарием и этим комментарием и настроите пользователя и БД, которые соответствуют вашему Linux имя пользователя).
  • Установите Redis, Foreman, Java и ElasticSearch (мне пришлось сделать это, это и $ sudo service elasticsearch start, чтобы запустить ElasticSearch).
  • Клонируйте репозиторий проекта.
  • Установите необходимую версию Ruby для приложения (2.3.0) и Bundler для этой версии.
  • Запустите $ bundle install, чтобы получить все необходимые драгоценные камни и настроить базу данных dev с помощью $ rake db:setup.

Теперь посмотрим, запустится ли набор тестов; $ rake db:test:prepare && bundle exec rspec и молитесь за зеленые точки 🙏:

Неплохо! За исключением того незавершенного теста, который испортил мой скриншот 😒.

Но это еще не все хорошие новости. Когда я пытаюсь запустить сервер разработки с $ foreman s, я получаю ошибки. Много-много ошибок:

Я потратил довольно много времени, пытаясь решить эту проблему, но без особого успеха. Я также обнаружил, что сталкиваюсь с раздражающими проблемами, такими как некоторые разрешения на владение файлами, которые, по-видимому, сбрасываются при каждом перезапуске, и многие службы, требующие перенастройки, потому что они не всегда работают на портах или под именами пользователей, как обычно.

Я уверен, что большинство, если не все, эти проблемы могут быть решены, если я потрачу на это время, но в какой-то момент этого будет достаточно, и вы поймете, что было бы проще использовать виртуальную машину, или двойную загрузку, или просто используйте этот блестящий Macbook.

Так что, несмотря на мои первоначальные надежды, WSL на самом деле не упрощает серьезную веб-разработку для Windows 🙁. Кажется, это нормально для более простых приложений и, без сомнения, будет улучшаться. Обновления происходят часто, и с момента запуска в середине прошлого года он уже значительно улучшился. На данный момент я оставлю его настроенным на своем дополнительном ноутбуке, просто чтобы поиграть с ним. Кстати говоря, давайте посмотрим на…

Настройка «Bash в Ubuntu в Windows»

Как отмечалось в части 1, «Bash на Ubuntu в Windows» — это быстрый способ установить образ Ubuntu на WSL и настроить оболочку bash, которая работает в эмуляторе терминала Windows по умолчанию. Тем не менее, все аспекты этого могут быть изменены, если вы хотите.

Использование разных дистрибутивов Linux

У меня нет большого опыта работы с Linux, поэтому я был рад придерживаться установки Ubuntu 16.04 по умолчанию. Но если вы хотите установить что-то еще, вот пара ссылок для начала:

Параметры эмулятора терминала

Терминал Windows по умолчанию довольно средний. Никаких вкладок или разделенных окон, мало цветов, плохая поддержка специальных символов. Если вы ищете что-то получше, ConEmu и MobaXterm часто упоминаются как надежные кандидаты, но я решил попробовать более новое приложение под названием Hyper. Вы можете увидеть его работу на скриншотах выше.

Чтобы установить его, просто скачайте установщик с их сайта. По умолчанию он запускается со стандартной оболочкой Windows, но вы, конечно, можете это изменить. Программа установки создает файл .hyper.js в C:\Users\<username> . Откройте это в текстовом редакторе, чтобы изменить настройки. Найдите строку shell и измените значение на:

'C:\\Windows\\System32\\bash.exe'

Обратите внимание на двойную обратную косую черту, специальные символы необходимо экранировать. Под этим измените значение shellArgs на ['~'], чтобы оболочка запускалась в домашнем каталоге Linux. Вы также можете настроить шрифты и цвета здесь, но проще использовать плагин.

Плагины поставляются в виде модулей npm, поэтому вам нужно будет установить родную сборку Windows Node.js, если у вас ее еще нет. Затем просто добавьте имена любых плагинов, которые вы хотите использовать, в раздел plugins файла настроек. Единственное, что меня пока беспокоило, — это цветовая схема, но есть много других, которые добавляют такие вещи, как URL-гиперссылки, раскрывающиеся окна в стиле Quake и т. д.; см. здесь для некоторых предложений.

После настройки все работает хорошо, и выглядит красиво, а это самое главное 😄. Это приложение Electron, так что оно не молниеносно, но я нашел его приличным на своем старом ThinkPad с питанием от песчанок, поэтому я уверен, что это не будет проблемой на более новом компьютере.

Чтобы получить подсказку, которую я использую на скриншоте выше, вам нужно посмотреть на…

Изменение оболочки

Bash хорош, но zsh лучше. Установите его, запустив:

$ sudo apt-get install zsh

Затем установите zsh в качестве оболочки по умолчанию, открыв ~/.bashrc в любом текстовом редакторе и добавив следующие строки прямо вверху:

# Launch Zsh
if [ -t 1 ]; then
exec zsh
fi

Это обеспечит загрузку zsh только при открытии окна терминала, другие процессы по-прежнему будут использовать bash, как и должны. Затем вы можете ввести $ zsh, чтобы запустить оболочку, вы получите некоторые параметры настройки в первый раз, просто выберите 2 для значений по умолчанию.

Теперь вы можете установить что-то вроде Oh My Zsh, если вам нужна масса тем и плагинов, но я решил не усложнять с чистой подсказкой и подсветкой синтаксиса. Установите оба с помощью:

$ npm install --global pure-prompt
$ sudo apt-get install zsh-syntax-highlighting

(Возможно, вам придется следовать this, если npm жалуется на разрешения.)

Затем откройте ~/.zshrc в текстовом редакторе. Измените первые несколько строк, чтобы они выглядели так:

fpath+=($fpath '/home/<USERNAME>/.npm-global/lib/node_modules/pure-prompt/functions')
autoload -U promptinit
promptinit
prompt pure

Это загрузит подсказку. Затем добавьте:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

в самом конце того же файла. Первая часть гарантирует, что rbenv (который мы установили в части 1) будет продолжать работать в новой оболочке, а последняя строка включает подсветку синтаксиса.

После сохранения перезагрузите оболочку с помощью $ source ~/.zshrc, и ваше приглашение должно иметь красивую подсветку синтаксиса, имя и статус ветки git, а также маленькие стрелки, чтобы показать, опережаете ли вы или отстаете от удаленного репо. Прекрасный.

Подведение итогов

Что ж, должен сказать, что я немного разочарован. WSL подает большие надежды, но он еще не совсем готов для использования в прайм-тайм, по крайней мере, для тех, у кого мои ограниченные навыки работы с Linux. Я полагаю, я должен был ожидать этого, учитывая, что он все еще находится в бета-версии! Но обновления будут поступать еженедельно, если вы участвуете в программе предварительной оценки Windows, и вскоре после выхода обновления Creators Update все, о чем я рассказал в этой статье, станет доступно для всех пользователей Windows.

Я думаю, что это хорошо для новичков в разработке. Необходимость узнать что-то об операционных системах * nix с самого начала практически неизбежна, но WSL может, по крайней мере, устранить проблему, связанную с необходимостью знать, как разбить жесткий диск на разделы и настроить загрузчик или виртуальную машину. Сокращение довольно пугающей кривой обучения кодированию является плюсом в моей книге, и приятно видеть, что Microsoft поддерживает разработчиков и программное обеспечение с открытым исходным кодом.