Java, UX, HTML, CSS, WEB-design

Руководство по запуску собственной жемчужины движка Rails

Краткое описание по статье Руководство по запуску собственной жемчужины движка Rails

Название: Руководство по запуску собственной жемчужины движка Rails . Краткое описание: [ad_1] ⭐ Райан К . Дата публикации: 21.02.2022 . Автор: Алишер Валеев .

Для чего создан сайт Novosti-Nedeli.ru

Данный сайт посвящен новостям мира и мира технологий . Также тут вы найдете руководства по различным девайсам.

Сколько лет сайту?

Возраст составляет 3 года

[ad_1]

  • Райан Кук

  • 0 Комментарии

Руководство по запуску собственной жемчужины движка Rails

  • 10 минут чтения

  • Кодирование, Ruby on Rails

Краткое резюме ↬

С момента выпуска Rails 3 разработчики пишут движки Rails в новом чистом стиле, который можно упаковать как RubyGems. Движок Rails — это предварительно упакованное приложение, которое можно запускать или монтировать в другом приложении Rails. Движок может иметь свои собственные модели, представления, контроллеры, генераторы и общедоступные статические файлы.

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

С момента выпуска Rails 3 разработчики пишут движки Rails в новом чистом стиле, который можно упаковать как RubyGems. Движок Rails — это предварительно упакованное приложение, которое можно запускать или монтировать в другом приложении Rails. Движок может иметь свои собственные модели, представления, контроллеры, генераторы и общедоступные статические файлы.

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

Дальнейшее чтение на SmashingMag:

  • Как начать работу с Ruby
  • Начните писать приложения для iOS с помощью RubyMotion
  • Руководство по запуску собственной жемчужины движка Rails
  • Как настроить локальную машину Ubuntu для Ruby On Rails

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

Еще после прыжка! Продолжить чтение ниже ↓

Двигатель

Хосе Валим, основной участник Rails, создал инструмент под названием Enginex, который формирует драгоценные камни движка, совместимые с Rails 3. Этот инструмент защищает вас от многих ошибок, с которыми сталкиваются разработчики движка. Он обеспечивает базовую настройку, включая тестовое приложение Rails, которое вам понадобится для начала работы.

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

gem install enginex
enginex team_page

При этом вы получите проект в team_page каталог, содержащий стандартный скаффолдинг Enginex.

Настраивать

Чтобы настроить наш гем, мы изменим несколько файлов. Во-первых, наш team_page.gemspec и наш Gemfile нужно немного любви.

# CURRENT FILE :: team_page.gemspec
require File.expand_path("../lib/team_page/version", __FILE__)

# Provide a simple gemspec so that you can easily use your
# Enginex project in your Rails apps through Git.
Gem::Specification.new do |s|F
  s.name                      = "team_page"
  s.version                   = TeamPage::VERSION
  s.platform                  = Gem::Platform::RUBY
  s.authors                   = [ "Your Name" ]
  s.email                     = [ "your@email.com" ]
  s.homepage                  = "https://yourwebsite.com"
  s.description               = "A simple Rails 3 engine gem that adds a team page to any Rails 3 application."
  s.summary                   = "team_page-#{s.version}"

  s.rubye_project         = "team_page"
  s.required_rubygems_version = "> 1.3.6"

  s.add_dependency "activesupport" , "~> 3.0.7"
  s.add_dependency "rails"         , "~> 3.0.7"

  s.files = `git ls-files`.split("n")
  s.executables = `git ls-files`.split("n").map{|f| f =~ /^bin/(.*)/ ? $1 : nil}.compact
  s.require_path="lib"
end
# CURRENT FILE :: Gemfile
source "https://rubygems"
# Specify any dependencies in the gemspec
gemspec

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

Также, позвонив gemspec в нашем GemfileБег bundle install загрузит зависимости от нашего team_page.gemspecчто является соглашением.

Далее, чтобы превратить наш драгоценный камень в движок Rails, давайте добавим или изменим три файла. Во-первых, файл страницы нашей команды верхнего уровня:

# CURRENT FILE :: lib/team_page.rb
# Requires
require "active_support/dependencies"

module TeamPage

  # Our host application root path
  # We set this when the engine is initialized
  mattr_accessor :app_root

  # Yield self on setup for nice config blocks
  def self.setup
    yield self
  end

end

# Require our engine
require "team_page/engine"

Чтобы использовать mattr функции, наши ActiveSupport требуются зависимости. Мы также настроили хороший способ настройки нашего драгоценного камня с помощью self.setup метод. Движок требуется в конце нашего файла, чтобы мы могли быть уверены, что любые зависимости указаны первыми.

Во-вторых, наш файл версии:

# CURRENT FILE :: lib/team_page/version.rb
module TeamPage
  VERSION = "0.0.1"
end

Наконец, наш файл движка:

# CURRENT FILE :: lib/team_page/engine.rb
module TeamPage

  class Engine < Rails::Engine

    initialize "team_page.load_app_instance_data" do |app|
      TeamPage.setup do |config|
        config.app_root = app.root
      end
    end

    initialize "team_page.load_static_assets" do |app|
      app.middleware.use ::ActionDispatch::Static, "#{root}/public"
    end

  end

end

Это определяет два Rails initialize блоки, которые подсказывают нам корневой каталог нашего хост-приложения Rails, а также обслуживают любые файлы в корне public каталог нашего драгоценного камня.

Модель данных

Чтобы добавить модель в наш гем, нам сначала нужно указать миграцию и класс генератора, чтобы скопировать ее в основное приложение Rails. Хотя этот процесс станет намного более прозрачным в Rails 3.1, теперь нам нужно создать несколько классов-генераторов. Отличный ресурс для этого можно найти в Nepal on Rails.

Во-первых, давайте добавим наш класс генераторов:

# CURRENT FILE :: lib/generators/team_page/team_page_generator.rb
# Requires
require 'rails/generators'
require 'rails/generators/migration'

class TeamPageGenerator < Rails::Generators::Base
  include Rails::Generators::Migration
  def self.source_root
    @source_root ||= File.join(File.dirname(__FILE__), 'templates')
  end

  def self.next_migration_number(dirname)
    if ActiveRecord::Base.timestamped_migrations
      Time.new.utc.strftime("%Y%m%d%H%M%S")
    else
      "%.3d" % (current_migration_number(dirname) + 1)
    end
  end

  def create_migration_file
    migration_template 'migration.rb', 'db/migrate/create_team_members_table.rb'
  end
end

Добавление этого позволит разработчикам запускать rails g team_page из своего приложения Rails и для создания необходимого файла миграции для работы нашей командной страницы.

Далее мы создадим пример миграции:

# CURRENT FILE :: lib/generators/team_page/templates/migration.rb
class CreateTeamMembers < ActiveRecord::Migration
  def self.up
    create_table :team_members do |t|
      t.string :name
      t.string :_url
      t.string :bio
      t.string :image_url
      t.timestamps
    end
  end

  def self.down
    drop_table :team_members
  end
end

Наконец, мы можем создать образец модели с пространством имен для нашего гема.

# CURRENT FILE :: app/models/team_page/team_member.rb
module TeamPage
  class TeamMember < ActiveRecord::Base
    attr_accessible :name , :_url , :bio , :image_url
  end
end

То, что мы сделали до сих пор, — это прошли этапы начальной загрузки гема движка Rails 3. Он настроен как механизм, имеет собственный генератор миграции и поставляется с моделью ActiveRecord.

Теперь давайте настроим наш гем с маршрутом, контроллером и представлением, которые может использовать любое хост-приложение Rails.

Маршрут

Драгоценные камни Rails Engine при правильной настройке автоматически загружают config а также app каталоги нашего проекта. Это удобно, потому что позволяет настроить наш код с точно такой же структурой, как и у полноценного приложения Rails.

Итак, чтобы настроить наш маршрут, создайте routes.rb файл в config каталог нашего проекта. Чтобы он совпадал на командном маршруте, давайте сделаем следующее:

# CURRENT FILE :: config/routes.rb
Rails.application.routes.draw do
  get "team" => "team_page/team#index" , :as => :team_page
end

Немного боли можно избежать, изучив то, что мы сделали здесь. Во-первых, мы собираемся соответствовать /team route от любых запросов к нашему основному приложению Rails.

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

Наконец, наш маршрут назван так, чтобы мы могли использовать помощники по ссылкам в другом месте нашего приложения.

Контроллер

Наши контроллеры будут жить в app каталог, как мы привыкли. Одно предостережение заключается в том, что мы хотим поместить их в team_page каталог, так же, как мы сделали с нашей моделью. Ему просто нужно загрузить всех членов нашей команды, чтобы они отображались на странице.

# CURRENT FILE :: app/controllers/team_page/team_controller.rb
module TeamPage
  class TeamController < ::ApplicationController
    def index
      @team_members = TeamMember.all
    end
  end
end

Как видите, мы создали подкласс нашего верхнего уровня ::ApplicationControllerкоторый находится в основном приложении Rails.

Вид

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

Как и в случае с нашей моделью и контроллером, мы вложим наше представление в team_page каталог. Поскольку мы хотим свести к минимуму внешние зависимости, мы напишем наши представления на ERB вместо чего-то вроде HAML.

<!-- CURRENT FILE :: app/views/team_page/index.html.erb -->
<ul class="team-member-list">
  <% @team_members.each do |team_member| %>
  <li class="team-member">
    <span class="team-member-name">
      <%= link_to @team_member.name , @team_member._url %>
    </span>
    <%= @team_member.bio %>
    <%= image_tag @team_member.image_url , :class => "team-member-image" %>
  </li>
  <% end %>
</ul>

Начало работы с тестами

Очевидно, что мы еще не написали здесь никаких модульных или интеграционных тестов, чтобы покрыть созданный нами гем. Выполнение этого упражнения улучшит ваше понимание драгоценных камней движка Rails 3. То enginex инструмент, который мы использовали, автоматически создает test для вас с базовым приложением Rails.

Начнем с того, что убедимся, что наш test_helper.rb файл готов.

# CURRENT FILE :: test/test_helper.rb
# Configure Rails Environment
ENV["RAILS_ENV"] = "test"
ENV["RAILS_ROOT"] = File.expand_path("../dummy",  __FILE__)

require File.expand_path("../dummy/config/environment.rb",  __FILE__)
require "rails/test_help"

ActionMailer::Base.delivery_method = :test
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.default_url_options[:host] = "test.com"

Rails.backtrace_cleaner.remove_silencers!

# Run any available migration
ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)

# Load support files
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }

Следует заметить, что это необычно для помощника по настройке тестирования: нам не требуется наш локальный код gem нигде в помощнике по тестированию. Поскольку мы используем Bundler, наш гем на самом деле требуется в фиктивном приложении Rails через наш Gemfile в test/dummy/config/application.rb. Кроме этого, мы настраиваем нашу среду Rails, загружаем приложение и запускаем все доступные миграции. Вот пример модульного теста.

# CURRENT FILE :: test/team_page_test.rb
require 'test_helper'

class TeamPageTest < ActiveSupport::TestCase

  test "truth" do
    assert_kind_of Module, TeamPage
  end

  test 'setup block yields self' do
    TeamPage.setup do |config|
      assert_equal TeamPage, config
    end
  end

end

Чтобы продолжить играть с тем, как работает тестирование движка и интеграция в приложении Rails, перейдите к test/dummy/ Приложение Rails и загрузите сервер или играйте в консоли. Там все должно работать так же, как и в любом другом приложении Rails.

Ресурсы и советы

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

## DIRECTORY STRUCTURE
#

- team_page/
  - app/
    - controllers/
      - team_page/
        + team_controller.rb
    - models/
      - team_page/
        + team_member.rb
    - views/
      - team_page/
        + index.html.erb
  - config/
    + routes.rb
  - lib/
    - team_page.rb
    - generators/
      - team_page/
        + team_page_generator.rb
        - templates/
          + migration.rb
    - team_page/
      + engine.rb
      + version.rb
  - test/
    + team_page_test.rb
    + test_helper.rb
  + team_page.gemspec
  + Gemfile
  + Gemfile.lock

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

## DATA SEED
#
# => Method 1
# Copy the code into your application's db/seeds.rb file.
#
# => Method 2
# If you would like to run this code in the engine that you are
# developing, place it in the seeds file inside of the dummy app
# contained in your integration tests.
#
# With either of the above methods, be sure to run the following from
# your command line…
#
#     rake db:seed
#

5.times do |i|

  TeamPage::TeamMember.create!( {
    :name        => "Team Member #{i}",
    :_url => "https://.com/team_member_#{i}",
    :bio         => "A really fancy team member!",
    :image_url   => "https://bit.ly/muSWki"
  } )

end

Некоторые внешние ресурсы

  • Исходный код движка Rails
  • Руководство RubyGems по созданию собственного камня
  • Создание драгоценного камня с помощью Bundler

Заключение

Цель этого поста состояла в том, чтобы продемонстрировать, насколько просто создать движок Rails, упакованный в виде драгоценного камня Ruby.

Напомним, что мы усилили наш гем, добавили модель и генератор миграции, настроили маршрут для обращения к нашему контроллеру, создали образец представления и написали несколько примеров тестов. Этот процесс можно использовать для любого драгоценного камня движка, который вам нужен, и он может ускорить время разработки и повысить надежность и ремонтопригодность ваших кодовых баз. Возможности безграничны. Что вы будете строить?

Сокрушительная редакция
(аль)



[ad_2]
Source: https://smashingmagazine.com

Заключение

Вы ознакомились с статьей — Руководство по запуску собственной жемчужины движка Rails

Пожалуйста оцените статью, и напишите комментарий.

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован.

Кнопка «Наверх»