Этот материал содержит в себе ответы на часто задаваемые вопросы по бесплатному курсу Ruby on Rails, который вы можете найти на YouTube.
Если вам нужна дополнительная помощь или есть мысли, что ещё можно добавить в этот документ, пишите в наш чат Telegram.
Должен заметить, что все эти уроки создаются на чистом энтузиазме, поэтому ваше пожертвование, даже небольшое, лишним не будет точно. Вы можете оформить спонсорство на YouTube, а также использовать 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 новое имя файла, иначе ваши стили просто не будут компилироваться.