FAQ по курсу Ruby on Rails

#rails #faq

Этот материал содержит в себе ответы на часто задаваемые вопросы по бесплатному курсу Ruby on Rails, который вы можете найти на YouTube.

Если вам нужна дополнительная помощь или есть мысли, что ещё можно добавить в этот документ, пишите в наш чат Telegram.

Должен заметить, что все эти уроки создаются на чистом энтузиазме, поэтому ваше пожертвование, даже небольшое, лишним не будет точно. Вы можете оформить спонсорство на YouTube, а также использовать DonationAlerts, Boosty или Patreon. Криптовалюту тоже можно отправить, мой адрес 0x719C2d2bcC155c85190f20E1Cc3710F90FAFDa16 (mainnet, binance smart chain, arbitrum one, zk era mainnet, matic mainnet).

Я просто хочу начать изучать Rails!

Отлично! В этом случае добро пожаловать в первый урок по Rails 7. Если кратко, вам потребуется установить интерпретатор языка Ruby, Node.js, Yarn, настроить sqlite3 и создать проект, как описано в уроке. Это несложно, но обязательно прочитайте раздел ниже.

Важные замечания о первом уроке, КОТОРЫЕ НУЖНО ПРОЧИТАТЬ!

Во-первых, убедитесь, что вы смотрите именно первый урок по Rails 7, то есть вот этот. На канале есть более старое видео о Rails 6, но оно уже устарело.

В первом уроке всё ещё используется Webpacker, но сейчас это решение я лично использовать бы не стал, так как оно считается устаревшим. Поэтому команда для создания приложения трансформируется в такую: rails new AskIt -T -j esbuild --css bootstrap --skip-hotwire.

Перед установкой убедитесь, что директория AskIt уже не была создана и что в текущей папке или в родительских папках нет файлов типа package.json или директории .yarn.

Если при установке вылетает ошибка "Error: Can't find stylesheet to import.", это не беда. Открывайте ваш только что созданный проект Rails, удаляйте из корня файл .pnp.cjs, а вместо него создайте файл .yarnrc.yml. В него добавляем вот такой контент:

nodeLinker: node-modules

Потом просто запустите команду yarn install. Вообще, всё это объясняется в первом видео и дальше можно следовать инструкциям, которые там представлены.

В видео предлагается добавить @rails/ujs версии 6, но сейчас уже есть версия новее, так что ваша строчка в package.json будет такой (впрочем, в этом же видео объясняется, как сделать апдейт всех библиотек):

"@rails/ujs": "^7.0.4-3"

Другой важный момент, если вы работаете на Windows. В какой-то момент, следуя инструкциям в видео, вы открываете файл Procfile.dev и его редактируете. Так вот, если там есть что-то вроде unset PORT, это надо убрать. Ваш Procfile.dev на Windows должен выглядеть вот так:

web: ruby bin/rails server -p 3000
js: yarn build --watch
css: yarn build:css --watch

А что насчёт Rails 6?

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

Я не знаю языка Ruby, что делать?

Материалов по Ruby предостаточно, а для начала работы с Rails достаточно знать самые основы. Вот здесь я записал плейлист по Ruby для "самых маленьких", хотя это подача в экспериментальном виде с шутками-прибаутками, так что, возможно, кому-то не зайдёт.

Ну, а если вы хотите освоить Ruby на уровне профессионала, то плейлист "секреты классов Ruby" (хотя, честно говоря, там не только о классах) точно для вас. Там никаких шуток, всё серьёзно.

Но я хочу ещё и Hotwire!

Никаких проблем. Если вы уже знаете основы Rails, то плейлист по Hotwire здесь. Если вы только начали знакомство с Rails, лучше пока двигаться постепенно. Ну, а в "главном" плейлисте по Rails вот этот урок расскажет, как перейти на Turbo (это и есть часть Hotwire). Следующие же уроки расскажут, как с этой технологией работать. Если вам не терпится, вы можете сразу посмотреть урок #23-34-25, а потом уже проходить плейлист по порядку, но учтите, что поначалу может быть сложно.

В третьем уроке я не могу удалить запись при нажатии по ссылке!

Если при нажатии по ссылке "удалить" у вас ничего не удаляется, а в консоли вылезает ошибка в духе "маршрут не найден", это значит, что вы всё-таки решили двигаться впереди паровоза и перешли на Turbo, но не ознакомились с его особенностями в уроках, перечисленных выше. Но и это не беда - вам достаточно немного изменить ссылки для удаления. Они должны выглядеть так:

<%= link_to 'Destroy', YOUR_ROUTE_HERE, data: { turbo_confirm: "Are you sure?", turbo_method: :delete } %>

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

Я исправил ссылку, но запись всё равно не удаляется!

Обычно такое происходит, если неправильно подключены скрипты или в них содержится какая-то ошибка, потому что само удаление выполняется с помощью JS (он правильно изменяет запрос, превращая его в DELETE). К сожалению, я не могу сказать наверняка, какова причина ошибки конкретно в вашем случае, но вот несколько советов.

Во-первых, проверьте, что вы правильно запускаете приложение (это вообще самая распространённая проблема). В первую очередь, установите библиотеку Foreman (gem install foreman). Далее, на системах nix можно использовать команду bin\dev. На Windows в корне проекта Rails можно создать файл start.cmd с вот таким содержимым:

foreman start -f Procfile.dev

Затем запускаем простой командой start.cmd из терминала.

Удостоверьтесь, что ваш Procfile.dev на Windows имеет содержимое вроде:

web: ruby bin/rails server -p 3000
js: yarn build --watch
css: yarn build:css --watch

Ну, если вы решили перейти на importmap, то там ситуация будет несколько иная, но этот случай рассматривать не будем (он и в уроках почти не упоминается).

Во-вторых, проверьте, что ваши команды для билда CSS и JS проходят успешно. Для этого удалите содержимое app/assets/builds и вручную в терминале запустите команды билда (например, yarn build && yarn build:css). Если в папке с билдами появляются новые файлы, то всё хорошо.

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

Если ничего не помогает, попробуйте пересоздать приложение: rails new AskIt -T -j esbuild --css bootstrap. Добавьте ключ --skip-hotwire если пока не хотите использовать Turbo и прочие прибамбасы Hotwire (они в большинстве уроков не сильно нужны, это дополнительный функционал, и про него есть отдельный плейлист).

В четвёртом уроке у меня, кажется, что-то не то со стилями

Проверьте, что ваш файл application.bootstrap.scss выглядит так:

@import 'bootstrap/scss/bootstrap';
@import 'bootstrap-icons/font/bootstrap-icons';

В уроке предлагается сделать отдельно файл с Bootstrap, а отдельно application.scss, но в простом случае делать этого не надо. Если вы всё-таки решите переименовать файл SCSS, то обязательно откройте package.json и найдите там вот этот кусок кода:

"build:css": "sass ./app/assets/stylesheets/application.bootstrap.scss

Укажите вместо application.bootstrap.scss новое имя файла, иначе ваши стили просто не будут компилироваться.