Skip to content

Release 1.2

Compare
Choose a tag to compare
@the-teacher the-teacher released this 28 Jan 18:07
· 212 commits to master since this release

Rails 7. Startkit

Rails7 StartKit-1 2

Rails 7 Start Kit.
Dockerized Rails App with the most popular preinstalled tools.

Great if you want to:

  • Start a new Rails project
  • Write a new article about Rails
  • Have a playground to learn Rails

👉 Subscribe to the project to know about most recent updates.

RELEASE 1.2 DETAILS

  • Rails updated to 7.0.4.2
  • gem updated to 3.4.5
  • installed gem mailcatcher
  • example of ActionMailer::Preview is added
  • article on medium
  • docker images
Screenshot 2023-01-28 at 14 43 32 Screenshot 2023-01-28 at 14 41 58

Rails 7. ActionMailer::Preview and Mailcatcher

This week I've added to Rails 7. Start Kit functionality related to sending and previewing emails. Release 1.2 is here. Details you can find in the PR.

How I did it

Step 1

I wanted to install gem mailcatcher directly to the Rails container in my project.
After some attempts I found that mailcatcher uses some old gems that are not compatible with ruby 3.2.

Obviously I just found a docker container and added it to my project.

  # docker/docker-compose.yml
  #
  mailcatcher:
    image: schickling/mailcatcher
    ports:
      - 1080:1080

Step 2

Now I should add launching of this new container in my bin/setup

  # Mailcatcher
  step_info "Launching Mailcatcher Container"
  system('docker compose -f docker/docker-compose.yml up mailcatcher -d')
  wait('to launch Mailcatcher Container')

Step 3

Now, when we have mailcatcher we should set up an address of the SMTP service. 

For development we should modify: config/environments/development.rb

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: "mailcatcher",
    port: 1025
  }

address: "mailcatcher" I use because it is a name of the container in docker/docker-compose.yml

Step 4

It is time to create Rails Mailer and implement our new email letter:

$ rails generate mailer demo

Step 5

In app/mailers/demo_mailer.rb we have to implement our email and default params.

class DemoMailer < ApplicationMailer
  default from: 'demo@rails7startkit.com'

  # DemoMailer.welcome_email.deliver!
  def welcome_email
    mail(
      to: "test@test.com",
      subject: 'Welcome to Rails 7. StartKit'
    )
  end
end

And letter's content: app/views/demo_mailer/welcome_email.html.erb

<!DOCTYPE html>
<html>
  <head>
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
  </head>
  <body>
    <h1>Welcome to Rails7. StartKit</h1>
    <p>Thanks for using this project!</p>
  </body>
</html>

Step 6

Time to check our mailer

We go to rails console

$ rails c

In rails console type

DemoMailer.welcome_email.deliver!

We see that email was sent

Step 7

Checking results in mailcatcher. Address: http://localhost:1080

Mailcatcher

Step 8

Also we can implement default ActionMailer::Preview

Just modify: test/mailers/previews/demo_mailer_preview.rb

# Preview all emails at http://localhost:3000/rails/mailers/demo_mailer
class DemoMailerPreview < ActionMailer::Preview
  # Accessible from  http://localhost:3000/rails/mailers/demo_mailer/welcome_email
  def welcome_email
    DemoMailer.welcome_email
  end
end

And now we can see the result

ActionMailer::Preview

Thank you for your interest to Rails 7. Start Kit
Star/Subscribe to the project to know about most recent updates.

Happy coding!