Как и любой выпуск программного обеспечения, это «лучший из всех»! Buffalo v0.8.0 действительно отличный релиз, и это благодаря большой работе сообщества, которая была проделана над ним. Я хотел бы поблагодарить всех, кто помог сделать этот замечательный релиз.

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

В дополнение к тому, что здесь перечислено, я рекомендую вам прочитать CHANGELOG для получения полного списка того, что изменилось в v0.8.0.

Что нового

Плюшевые

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

https://blog.gobuffalo.io/introduction-to-plus-82a8a12cf98a#.y5x0wtsp7

Я в восторге от Плюша. Это позволит приложениям Buffalo делать действительно удивительные вещи на уровне шаблона.

Улучшения генератора ресурсов

По умолчанию при создании нового ресурса Buffalo также создает для вас соответствующую модель и миграции.

См. buffalo g resource --help несколько замечательных примеров использования этой функции.

"buffalo test" Улучшения команд

Встроенная команда buffalo test теперь проверяет, правильно ли создана и перенесена ваша тестовая база данных, прежде чем запускать набор тестов.

Наборы для тестирования

Это определенно требует отдельного поста, но теперь Buffalo поставляется с набором для «тестирования». Преимущество такого пакета заключается в том, что код тестирования теперь меньше и его легче писать. Еще одним преимуществом использования пакета является то, что Buffalo теперь может автоматически откатывать любые изменения, внесенные в вашу базу данных во время тестирования! Больше не нужно беспокоиться о том, что данные одного теста будут противоречить данным другого теста, Buffalo прикроет вашу спину!

func (as *ActionSuite) Test_PostsResource_Show() {
   post := &models.Post{Title: "Hello World"}
   err := as.DB.Create(post)
   as.NoError(err)
   res := as.HTML("/posts/%s", post.ID).Get()
   as.Equal(200, res.Code)
   as.Contains(res.Body.String(), post.Title)
}

Скрипт «установка буйвола»

Когда вы создаете новое приложение или настраиваете его, вам предстоит многое сделать. Чтобы немного облегчить жизнь, теперь есть команда buffalo setup, которая призвана снять с ваших плеч немного стресса.

Setup runs through checklist to make sure dependencies are setup correcly.
Asset Pipeline (if used):
* Runs "npm install" or "yarn install" to install asset dependencies.
Database (if used):
* Runs "buffalo db create -a" to create databases.
* Runs "buffalo db migrate" to run database migrations.
* Runs "buffalo task db:seeed" to seed the database (if the task exists).
Tests:
* Runs "buffalo test" to confirm the application's tests are running properly.
Usage:
buffalo setup [flags]
Flags:
-d, --drop     drop existing databases
-u, --update   run go get -u -v against the application's Go dependencies

Меньше обязательных (внешних) пакетов

В v0.8.0 было приложено много усилий, чтобы уменьшить количество сторонних пакетов. Это постоянные усилия, направленные на то, чтобы сделать Buffalo более стабильным и надежным.

Создать CI-файл GitLab

GitLab CI присоединяется к Travis в качестве «поддерживаемой» системы CI. Это означает, что Buffalo может создавать файлы для этих служб при создании нового приложения Buffalo. Эти файлы предназначены для облегчения вашей жизни при настройке приложения Buffalo для этих служб.

Многочисленные исправления ошибок

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

Критические изменения (скорее всего)

В жизни каждого должен пролиться небольшой дождь.

Хотя мы стараемся поддерживать стабильный API, иногда это невозможно. Buffalo также еще не достиг 1.0, а это значит, что мы рассматриваем «второстепенную» версию релиза как «основную» версию. Версия 0.8.0 – это большой релиз, и к тому же потрясающий. Чтобы помочь подтолкнуть нас к нашей цели 1.0, нам пришлось кое-что изменить в API, но я думаю, вы согласитесь, что они только делают Buffalo лучше!

Если у вас уже есть приложение Buffalo, ознакомьтесь с изменениями ниже, чтобы быть в курсе изменений, которые вам нужно будет внести в свое приложение.

Плюшевые

Поскольку теперь Plush используется по умолчанию для v0.8.0 старых приложений, созданных с использованием Velvet, необходимо будет либо обновить все свои шаблоны до синтаксиса Plush, либо изменить свой механизм шаблонов для использования Velvet. Лично я бы порекомендовал обновить ваши шаблоны, так как Plush намного превосходит Velvet.

Если вы не хотите использовать потрясающий соус, которым является Plush, вы можете продолжать использовать Velvet в качестве механизма шаблонов. Чтобы сменить механизм шаблонов на Velvet, обновите actions/render.go соответствующим образом:

func init() {
	r = render.New(render.Options{
		...
		TemplateEngine: velvet.BuffaloRenderer,
		...
	})
}

Имейте в виду, что по мере разработки Buffalo будет использовать преимущества Plush с новыми функциями, которые могут быть доступны или недоступны в других механизмах шаблонов.

Удален go.rice как упаковщик ресурсов.

Каждый, кто провел хоть какое-то время с Buffalo, хотя бы раз сталкивался с этой проблемой:

panic: could not locate box "../public/assets" [recovered]
panic: could not locate box "../public/assets"

Это раздражающая проблема, вызванная пакетом, который мы использовали для объединения ресурсов, таких как шаблоны, JavaScript и т. д., в двоичный файл с buffalo build. Пакет go.rice имел и другие проблемы, помимо использования panic. Использование таких пакетов, как unsafe, означало, что это было препятствием на пути к нашей цели заставить Buffalo работать с GAE.

С этой целью мы полностью удалили go.rice из фреймворка Buffalo и заменили его на https://github.com/gobuffalo/packr. Packr предоставляет функциональность, аналогичную go.rice, но без паники и с использованием пакетов, которые не препятствуют получению поддержки GAE.

Более того, благодаря этим изменениям мы можем очистить сгенерированный файл actions/render.go и уменьшить требования к пакету render.

// actions/render.go
func init() {
	r = render.New(render.Options{
		...
		TemplatesBox: packr.NewBox("../templates"),
		...
	})
}

Мы также можем очистить файл actions/app.go, чтобы использовать каталог Packr для обслуживания ресурсов.

// actions/app.go
func App() *buffalo.App {
  if app == nil {
    ...
    app.ServeFiles("/assets", packr.NewBox("../public/assets"))
    ...
  }
}

Мы также полностью удалили пакет resolvers, так как с Packr в нем больше нет необходимости.

Обновлены параметры пакета «render».

Были удалены следующие опции:

  • CacheTemplates
  • TemplatesPath
  • FileResolverFunc

Поскольку эти параметры были удалены из render.Options, вы можете получить ошибки, подобные следующим:

actions/render.go:18: unknown field ‘CacheTemplates’ in struct literal of type render.Options

Исправление для этого состоит в том, чтобы просто удалить оскорбительные строки кода из actions/render.go.

Удалено промежуточное ПО New Relic

Это промежуточное программное обеспечение было удалено из-за отсутствия использования.