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

Мы только что рассмотрели высокоуровневое нетехническое описание приложения, которое мы создадим. Пришло время отправиться в волшебное космическое путешествие по строительству этой штуки. Готовый?

Любой архитектор скажет вам, что самым важным элементом любой конструкции является пол. Основа. Основой любого веб-приложения является его сервер. Сегодня мы настроим веб-сервер под управлением Ruby on Rails.

Но что такое веб-сервер? Рад, что вы спросили! Если вы уже поняли это, вы можете сразу перейти к абзацу, начинающемуся со слов «Сейчас! Руби, Рельсы». Но если вы не совсем уверены, то я дам вам некоторый контекст, основу для будущей разработки веб-приложения.

Я начну с нескольких основных концепций о том, как работает Интернет. Есть такая вещь, как цикл запрос-ответ. Это основная концепция почти всего интернет-трафика, а веб-серверы — ее краеугольный камень.

Ответ на запрос

Рассмотрим действие, которое мы все делаем ежедневно: введите веб-адрес и нажмите Enter.

Браузер запускает веб-запрос по этому целевому URL-адресу; запрос бежит через Интернет к компьютеру на другом конце. Этот компьютер делает вещи. Он отправляет обратно через Интернет некоторые данные ответа (часто веб-страницу); ваш браузер получает его; и делает с ним больше вещей. Вы только что ввели веб-адрес, поэтому действие вашего браузера «Дополнительно» на этот раз заключается в отображении и отображении HTML-кода веб-страницы этого адреса.

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

В настоящее время! Руби, Рельсы. Что, черт возьми, они такое?

Руби, Рельсы

Резюме Два. То же, что и раньше: если вы уверены в фреймворках, переходите к разделу «Существует миллион фантастических руководств…»

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

Руби — язык программирования общего назначения. В нем можно написать практически любую программу.

Ruby on Rails, или просто Rails (далее я буду использовать Rails, так проще) — это набор программ и библиотек, написанных на Ruby, специально предназначенных для облегчения написания веб-приложений. Вокруг полно разных, хотя Rails — один из наиболее зрелых и почтенных. Если вы хотите напомнить мне, насколько я неправ в этом, в комментариях, сделайте это! Давай, детка.

Рельсы крепкие. Рельсы в порядке. Рельсы это матерый. Рельсы — это отец. Рельсы вечны. Когда Солнце сожмется, а океаны высохнут, и все придет в запустение и разложение, Рельсы останутся. Мы будем использовать Rails для нашего веб-фреймворка.

Уже есть миллионы фантастических руководств по установке Ruby и Rails. Я не буду тратить слова на то, чтобы срывать их. Я дам ссылки на несколько в ближайшее время. Но сначала немного ценного контекста.

Вы знаете, когда вы устанавливаете современную игру для ПК / консоли? Это десятки гигабайт. Занимает возраст. Но все технические детали процесса установки, которые когда-либо отображал пользовательский интерфейс, — это индикатор выполнения плюс, возможно, строка текста, дающая невероятно краткую сводку процесса установки. Что он там на самом деле делает?Какие непроницаемые, загадочные извилины скрывает пользовательский интерфейс установки?

Что ж, юный падаван, сегодня твой счастливый день! Пришло время раскрыть настоящие потроха установки чего-то сложного.

Вот один для Mac и вот один для Linux. Они сами устанавливают основные библиотеки Rails, которые вы затем используете для создания любого количества веб-приложений на основе Rails.

Используете Windows? О, Боже. Установить Rails там технически можно, но я бы не советовал. Тем не менее, вот статья, обсуждающая это. Полистайте на досуге.

Между прочим, я признаю, что каждое руководство по установке довольно увесистое. Если вы никогда не пробовали устанавливать Rails на свой компьютер, возможно, вы захотите отложить это на один-два дня. Но оно того стоит. Перейдите по любой из этих ссылок в графических деталях, и вы узнаете о компьютерах и программировании больше, чем месяцы в школе. И пожалуйста, не пугайтесь этого! Я говорю, что знание того, что я говорю «пожалуйста, не пугайтесь», не заставит ваш трепет каким-то волшебным образом исчезнуть. Но раздвигать границы — вот что такое веб-разработка. Если вы будете следовать инструкциям в любом учебнике и столкнетесь с препятствием, которое не сможете преодолеть, сообщите мне об этом в комментариях, и я помогу всем, чем смогу.

Все сделано? Потрясающе! Вперед.

Теперь мы настраиваем новый API Rails. Если вы хотите узнать больше о том, что это такое, посмотрите это в собственной документации веб-сайта Rails. Вам действительно не нужно исправлять эту секунду, я просто включил ее для полноты и любопытства.

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

$ rails new gigs --api

Вы увидите огромное количество отзывов из командной строки, показывающих массу новых созданных файлов. Вот что показала моя собственная командная строка:

$ rails new gigs --api
      create  
      create  README.md
      create  Rakefile
      create  .ruby-version
      create  config.ru
      create  .gitignore
      create  Gemfile
         run  git init from "."
Initialized empty Git repository in /Users/michaelclarke/Work/gigs/.git/
      create  app
      create  app/assets/config/manifest.js
      create  app/assets/javascripts/application.js
      create  app/assets/javascripts/cable.js
      create  app/assets/stylesheets/application.css
      create  app/channels/application_cable/channel.rb
      create  app/channels/application_cable/connection.rb
      create  app/controllers/application_controller.rb
      create  app/helpers/application_helper.rb
      create  app/jobs/application_job.rb
      create  app/mailers/application_mailer.rb
      create  app/models/application_record.rb
      create  app/views/layouts/application.html.erb
      create  app/views/layouts/mailer.html.erb
      create  app/views/layouts/mailer.text.erb
      create  app/assets/images/.keep
      create  app/assets/javascripts/channels
      create  app/assets/javascripts/channels/.keep
      create  app/controllers/concerns/.keep
      create  app/models/concerns/.keep
      create  bin
      create  bin/bundle
      create  bin/rails
      create  bin/rake
      create  bin/setup
      create  bin/update
      create  bin/yarn
      create  config
      create  config/routes.rb
      create  config/application.rb
      create  config/environment.rb
      create  config/cable.yml
      create  config/puma.rb
      create  config/spring.rb
      create  config/storage.yml
      create  config/environments
      create  config/environments/development.rb
      create  config/environments/production.rb
      create  config/environments/test.rb
      create  config/initializers
      create  config/initializers/application_controller_renderer.rb
      create  config/initializers/assets.rb
      create  config/initializers/backtrace_silencers.rb
      create  config/initializers/content_security_policy.rb
      create  config/initializers/cookies_serializer.rb
      create  config/initializers/cors.rb
      create  config/initializers/filter_parameter_logging.rb
      create  config/initializers/inflections.rb
      create  config/initializers/mime_types.rb
      create  config/initializers/new_framework_defaults_5_2.rb
      create  config/initializers/wrap_parameters.rb
      create  config/locales
      create  config/locales/en.yml
      create  config/master.key
      append  .gitignore
      create  config/boot.rb
      create  config/database.yml
      create  db
      create  db/seeds.rb
      create  lib
      create  lib/tasks
      create  lib/tasks/.keep
      create  lib/assets
      create  lib/assets/.keep
      create  log
      create  log/.keep
      create  public
      create  public/404.html
      create  public/422.html
      create  public/500.html
      create  public/apple-touch-icon-precomposed.png
      create  public/apple-touch-icon.png
      create  public/favicon.ico
      create  public/robots.txt
      create  tmp
      create  tmp/.keep
      create  tmp/cache
      create  tmp/cache/assets
      create  vendor
      create  vendor/.keep
      create  test/fixtures
      create  test/fixtures/.keep
      create  test/fixtures/files
      create  test/fixtures/files/.keep
      create  test/controllers
      create  test/controllers/.keep
      create  test/mailers
      create  test/mailers/.keep
      create  test/models
      create  test/models/.keep
      create  test/helpers
      create  test/helpers/.keep
      create  test/integration
      create  test/integration/.keep
      create  test/test_helper.rb
      create  storage
      create  storage/.keep
      create  tmp/storage
      create  tmp/storage/.keep
      remove  app/assets
      remove  lib/assets
      remove  tmp/cache/assets
      remove  app/helpers
      remove  test/helpers
      remove  app/views/layouts/application.html.erb
      remove  public/404.html
      remove  public/422.html
      remove  public/500.html
      remove  public/apple-touch-icon-precomposed.png
      remove  public/apple-touch-icon.png
      remove  public/favicon.ico
      remove  app/assets/javascripts
      remove  config/initializers/assets.rb
      remove  config/initializers/cookies_serializer.rb
      remove  config/initializers/content_security_policy.rb
      remove  config/initializers/new_framework_defaults_5_2.rb
      remove  bin/yarn
         run  bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/..................
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies....
Using rake 12.3.3
Using concurrent-ruby 1.1.5
Using i18n 1.6.0
Using minitest 5.11.3
Using thread_safe 0.3.6
Using tzinfo 1.2.5
Using activesupport 5.2.3
Using builder 3.2.3
Using erubi 1.8.0
Using mini_portile2 2.4.0
Using nokogiri 1.10.4
Using rails-dom-testing 2.0.3
Using crass 1.0.4
Using loofah 2.2.3
Using rails-html-sanitizer 1.2.0
Using actionview 5.2.3
Using rack 2.0.7
Using rack-test 1.1.0
Using actionpack 5.2.3
Using nio4r 2.4.0
Using websocket-extensions 0.1.4
Using websocket-driver 0.7.1
Using actioncable 5.2.3
Using globalid 0.4.2
Using activejob 5.2.3
Using mini_mime 1.0.2
Using mail 2.7.1
Using actionmailer 5.2.3
Using activemodel 5.2.3
Using arel 9.0.0
Using activerecord 5.2.3
Using mimemagic 0.3.3
Using marcel 0.3.3
Using activestorage 5.2.3
Using msgpack 1.3.1
Using bootsnap 1.4.4
Using bundler 1.16.4
Using byebug 11.0.1
Using ffi 1.11.1
Using rb-fsevent 0.10.3
Using rb-inotify 0.10.0
Using ruby_dep 1.5.0
Using listen 3.1.5
Using method_source 0.9.2
Using puma 3.12.1
Using thor 0.20.3
Using railties 5.2.3
Using sprockets 3.7.2
Using sprockets-rails 3.2.1
Using rails 5.2.3
Using spring 2.1.0
Using spring-watcher-listen 2.0.1
Using sqlite3 1.4.1
Bundle complete! 9 Gemfile dependencies, 53 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
         run  bundle exec spring binstub --all
* bin/rake: Spring inserted
* bin/rails: Spring inserted

Вы увидите, что есть два основных раздела. Команда создает большой список новых файлов; и он устанавливает список новых драгоценных камней. Возможно, вы помните «жемчужину» по установке Rails: это программа или библиотека, написанная на Ruby и общедоступная на rubygems.org.

Зверей миллионы. Rails нужно несколько десятков, чтобы делать вещи, похожие на Rails. Rails сам по себе является жемчужиной. Я расскажу вам о драгоценных камнях более подробно в других статьях.

И на этом эта статья завершена! Вы создали новое приложение Rails. Сейчас он на самом деле ничего не делает, но мы скоро это исправим.

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

В следующий раз: контроль версий, Git.