Rob Thomas

Joined

750 Experience
2 Lessons Completed
0 Questions Solved

Activity

Posted in Heroku Error - We're sorry, but something went wrong.

Hey Guys,

I deployed my app to Heroku but I am getting the "We're sorry, but something went wrong.
" so I ran heroku logs and this is what I got:

2019-11-07T18:45:20.355498+00:00 app[web.1]: I, [2019-11-07T18:45:20.355439 #4]  INFO -- : [7492e320-8744-4a1c-8b10-fac1bf495c37]   Rendered shared/pages/_pages-nav.html.erb (Duration: 0.5ms | Allocations: 173)
2019-11-07T18:45:20.356892+00:00 app[web.1]: I, [2019-11-07T18:45:20.356832 #4]  INFO -- : [7492e320-8744-4a1c-8b10-fac1bf495c37]   Rendered shared/pages/_pages-footer.html.erb (Duration: 0.4ms | Allocations: 153)
2019-11-07T18:45:20.357197+00:00 app[web.1]: I, [2019-11-07T18:45:20.356990 #4]  INFO -- : [7492e320-8744-4a1c-8b10-fac1bf495c37]   Rendered pages/index.html.erb within layouts/application (Duration: 2.2ms | Allocations: 834)
2019-11-07T18:45:20.358268+00:00 app[web.1]: I, [2019-11-07T18:45:20.358206 #4]  INFO -- : [7492e320-8744-4a1c-8b10-fac1bf495c37] Completed 500 Internal Server Error in 4ms (Allocations: 1534)
2019-11-07T18:45:20.359681+00:00 app[web.1]: F, [2019-11-07T18:45:20.359621 #4] FATAL -- : [7492e320-8744-4a1c-8b10-fac1bf495c37]
2019-11-07T18:45:20.359685+00:00 app[web.1]: [7492e320-8744-4a1c-8b10-fac1bf495c37] ActionView::Template::Error (Webpacker can't find application in /app/public/packs/manifest.json. Possible causes:
2019-11-07T18:45:20.359687+00:00 app[web.1]: 1. You want to set webpacker.yml value of compile to true for your environment
2019-11-07T18:45:20.359689+00:00 app[web.1]: unless you are using the `webpack -w` or the webpack-dev-server.
2019-11-07T18:45:20.359691+00:00 app[web.1]: 2. webpack has not yet re-run to reflect updates.
2019-11-07T18:45:20.359693+00:00 app[web.1]: 3. You have misconfigured Webpacker's config/webpacker.yml file.
2019-11-07T18:45:20.359696+00:00 app[web.1]: 4. Your webpack configuration is not creating a manifest.
2019-11-07T18:45:20.359698+00:00 app[web.1]: Your manifest contains:
2019-11-07T18:45:20.359700+00:00 app[web.1]: {
2019-11-07T18:45:20.359702+00:00 app[web.1]: }
2019-11-07T18:45:20.359704+00:00 app[web.1]: ):
2019-11-07T18:45:20.359706+00:00 app[web.1]: [7492e320-8744-4a1c-8b10-fac1bf495c37]      6:     <%= csp_meta_tag %>
2019-11-07T18:45:20.359709+00:00 app[web.1]: [7492e320-8744-4a1c-8b10-fac1bf495c37]      7:
2019-11-07T18:45:20.359711+00:00 app[web.1]: [7492e320-8744-4a1c-8b10-fac1bf495c37]      8:     <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
2019-11-07T18:45:20.359713+00:00 app[web.1]: [7492e320-8744-4a1c-8b10-fac1bf495c37]      9:     <%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
2019-11-07T18:45:20.359716+00:00 app[web.1]: [7492e320-8744-4a1c-8b10-fac1bf495c37]     10:     <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
2019-11-07T18:45:20.359718+00:00 app[web.1]: [7492e320-8744-4a1c-8b10-fac1bf495c37]     11:   </head>
2019-11-07T18:45:20.359720+00:00 app[web.1]: [7492e320-8744-4a1c-8b10-fac1bf495c37]     12:
2019-11-07T18:45:20.359722+00:00 app[web.1]: [7492e320-8744-4a1c-8b10-fac1bf495c37]
2019-11-07T18:45:20.359725+00:00 app[web.1]: [7492e320-8744-4a1c-8b10-fac1bf495c37] app/views/layouts/application.html.erb:9
2019-11-07T18:45:20.360860+00:00 heroku[router]: at=info method=GET path="/" host=secret-thicket-83846.herokuapp.com request_id=7492e320-8744-4a1c-8b10-fac1bf495c37 fwd="76.186.127.38" dyno=web.1 connect=0ms service=10ms status=500 bytes=1827 protocol=https
2019-11-07T18:49:23.000000+00:00 app[api]: Build started by user [email protected]
2019-11-07T18:49:50.947351+00:00 app[api]: Deploy 1d47c257 by user [email protected]
2019-11-07T18:49:51.121757+00:00 heroku[web.1]: Restarting
2019-11-07T18:49:51.158559+00:00 heroku[web.1]: State changed from up to starting
2019-11-07T18:49:50.947351+00:00 app[api]: Release v7 created by user [email protected]
2019-11-07T18:49:52.658782+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2019-11-07T18:49:52.683472+00:00 app[web.1]: - Gracefully stopping, waiting for requests to finish
2019-11-07T18:49:52.691000+00:00 app[web.1]: === puma shutdown: 2019-11-07 18:49:52 +0000 ===
2019-11-07T18:49:52.691010+00:00 app[web.1]: - Goodbye!
2019-11-07T18:49:52.691261+00:00 app[web.1]: Exiting
2019-11-07T18:49:52.849987+00:00 heroku[web.1]: Process exited with status 143
2019-11-07T18:49:53.000000+00:00 app[api]: Build succeeded
2019-11-07T18:49:56.704516+00:00 heroku[web.1]: Starting process with command `bin/rails server -p 3210 -e production`
2019-11-07T18:50:01.402539+00:00 app[web.1]: => Booting Puma
2019-11-07T18:50:01.402568+00:00 app[web.1]: => Rails 6.0.1 application starting in production
2019-11-07T18:50:01.402571+00:00 app[web.1]: => Run `rails server --help` for more startup options
2019-11-07T18:50:02.814579+00:00 heroku[web.1]: State changed from starting to up
2019-11-07T18:50:02.579574+00:00 app[web.1]: Puma starting in single mode...
2019-11-07T18:50:02.579617+00:00 app[web.1]: * Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
2019-11-07T18:50:02.579621+00:00 app[web.1]: * Min threads: 5, max threads: 5
2019-11-07T18:50:02.579623+00:00 app[web.1]: * Environment: production
2019-11-07T18:50:02.579894+00:00 app[web.1]: * Listening on tcp://0.0.0.0:3210
2019-11-07T18:50:02.580296+00:00 app[web.1]: Use Ctrl-C to stop
2019-11-07T18:50:39.000000+00:00 app[api]: Build started by user [email protected]
2019-11-07T18:51:07.918657+00:00 heroku[web.1]: Restarting
2019-11-07T18:51:07.935252+00:00 heroku[web.1]: State changed from up to starting
2019-11-07T18:51:08.881532+00:00 app[web.1]: - Gracefully stopping, waiting for requests to finish
2019-11-07T18:51:08.882629+00:00 app[web.1]: === puma shutdown: 2019-11-07 18:51:08 +0000 ===
2019-11-07T18:51:08.882673+00:00 app[web.1]: - Goodbye!
2019-11-07T18:51:08.882843+00:00 app[web.1]: Exiting
2019-11-07T18:51:08.869511+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2019-11-07T18:51:08.945205+00:00 heroku[web.1]: Process exited with status 143
2019-11-07T18:51:07.450121+00:00 app[api]: Release v8 created by user [email protected]
2019-11-07T18:51:07.450121+00:00 app[api]: Deploy 10d4e58c by user [email protected]
2019-11-07T18:51:10.000000+00:00 app[api]: Build succeeded
2019-11-07T18:51:14.243753+00:00 heroku[web.1]: Starting process with command `bin/rails server -p 57251 -e production`
2019-11-07T18:51:22.012879+00:00 app[web.1]: => Booting Puma
2019-11-07T18:51:22.012909+00:00 app[web.1]: => Rails 6.0.1 application starting in production
2019-11-07T18:51:22.012911+00:00 app[web.1]: => Run `rails server --help` for more startup options
2019-11-07T18:51:23.940759+00:00 app[web.1]: Puma starting in single mode...
2019-11-07T18:51:23.940815+00:00 app[web.1]: * Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
2019-11-07T18:51:23.940818+00:00 app[web.1]: * Min threads: 5, max threads: 5
2019-11-07T18:51:23.940821+00:00 app[web.1]: * Environment: production
2019-11-07T18:51:23.941113+00:00 app[web.1]: * Listening on tcp://0.0.0.0:57251
2019-11-07T18:51:23.941523+00:00 app[web.1]: Use Ctrl-C to stop
2019-11-07T18:51:24.411028+00:00 heroku[web.1]: State changed from starting to up
2019-11-07T18:51:26.442192+00:00 heroku[router]: at=info method=GET path="/" host=secret-thicket-83846.herokuapp.com request_id=8a468676-9584-4fb3-96e4-244cd24c4e54 fwd="76.186.127.38" dyno=web.1 connect=8ms service=28ms status=500 bytes=1827 protocol=https
2019-11-07T18:51:26.416853+00:00 app[web.1]: I, [2019-11-07T18:51:26.416723 #4]  INFO -- : [8a468676-9584-4fb3-96e4-244cd24c4e54] Started GET "/" for 76.186.127.38 at 2019-11-07 18:51:26 +0000
2019-11-07T18:51:26.419407+00:00 app[web.1]: I, [2019-11-07T18:51:26.419321 #4]  INFO -- : [8a468676-9584-4fb3-96e4-244cd24c4e54] Processing by PagesController#index as HTML
2019-11-07T18:51:26.429775+00:00 app[web.1]: I, [2019-11-07T18:51:26.429640 #4]  INFO -- : [8a468676-9584-4fb3-96e4-244cd24c4e54]   Rendering pages/index.html.erb within layouts/application
2019-11-07T18:51:26.433285+00:00 app[web.1]: I, [2019-11-07T18:51:26.433177 #4]  INFO -- : [8a468676-9584-4fb3-96e4-244cd24c4e54]   Rendered shared/pages/_pages-nav.html.erb (Duration: 1.2ms | Allocations: 428)
2019-11-07T18:51:26.436145+00:00 app[web.1]: I, [2019-11-07T18:51:26.436053 #4]  INFO -- : [8a468676-9584-4fb3-96e4-244cd24c4e54]   Rendered shared/pages/_pages-footer.html.erb (Duration: 1.4ms | Allocations: 454)
2019-11-07T18:51:26.436316+00:00 app[web.1]: I, [2019-11-07T18:51:26.436241 #4]  INFO -- : [8a468676-9584-4fb3-96e4-244cd24c4e54]   Rendered pages/index.html.erb within layouts/application (Duration: 6.4ms | Allocations: 2233)
2019-11-07T18:51:26.438291+00:00 app[web.1]: I, [2019-11-07T18:51:26.438178 #4]  INFO -- : [8a468676-9584-4fb3-96e4-244cd24c4e54] Completed 500 Internal Server Error in 19ms (Allocations: 4225)
2019-11-07T18:51:26.439773+00:00 app[web.1]: F, [2019-11-07T18:51:26.439690 #4] FATAL -- : [8a468676-9584-4fb3-96e4-244cd24c4e54]
2019-11-07T18:51:26.439776+00:00 app[web.1]: [8a468676-9584-4fb3-96e4-244cd24c4e54] ActionView::Template::Error (Webpacker can't find application in /app/public/packs/manifest.json. Possible causes:
2019-11-07T18:51:26.439779+00:00 app[web.1]: 1. You want to set webpacker.yml value of compile to true for your environment
2019-11-07T18:51:26.439781+00:00 app[web.1]: unless you are using the `webpack -w` or the webpack-dev-server.
2019-11-07T18:51:26.439789+00:00 app[web.1]: 2. webpack has not yet re-run to reflect updates.
2019-11-07T18:51:26.439791+00:00 app[web.1]: 3. You have misconfigured Webpacker's config/webpacker.yml file.
2019-11-07T18:51:26.439794+00:00 app[web.1]: 4. Your webpack configuration is not creating a manifest.
2019-11-07T18:51:26.439796+00:00 app[web.1]: Your manifest contains:
2019-11-07T18:51:26.439798+00:00 app[web.1]: {
2019-11-07T18:51:26.439800+00:00 app[web.1]: }
2019-11-07T18:51:26.439802+00:00 app[web.1]: ):
2019-11-07T18:51:26.439805+00:00 app[web.1]: [8a468676-9584-4fb3-96e4-244cd24c4e54]      6:     <%= csp_meta_tag %>
2019-11-07T18:51:26.439807+00:00 app[web.1]: [8a468676-9584-4fb3-96e4-244cd24c4e54]      7:
2019-11-07T18:51:26.439809+00:00 app[web.1]: [8a468676-9584-4fb3-96e4-244cd24c4e54]      8:     <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
2019-11-07T18:51:26.439811+00:00 app[web.1]: [8a468676-9584-4fb3-96e4-244cd24c4e54]      9:     <%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
2019-11-07T18:51:26.439814+00:00 app[web.1]: [8a468676-9584-4fb3-96e4-244cd24c4e54]     10:     <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
2019-11-07T18:51:26.439816+00:00 app[web.1]: [8a468676-9584-4fb3-96e4-244cd24c4e54]     11:   </head>
2019-11-07T18:51:26.439818+00:00 app[web.1]: [8a468676-9584-4fb3-96e4-244cd24c4e54]     12:
2019-11-07T18:51:26.439820+00:00 app[web.1]: [8a468676-9584-4fb3-96e4-244cd24c4e54]
2019-11-07T18:51:26.439822+00:00 app[web.1]: [8a468676-9584-4fb3-96e4-244cd24c4e54] app/views/layouts/application.html.erb:9
2019-11-07T18:51:26.884395+00:00 heroku[router]: at=info method=GET path="/favicon.ico" host=secret-thicket-83846.herokuapp.com request_id=f6ab460f-68cb-456f-a6f7-4ba7ba947b00 fwd="76.186.127.38" dyno=web.1 connect=1ms service=2ms status=200 bytes=143 protocol=https

Posted in S3 Storage and Active Storage Images not showing

Hey Guys,

I have S3 Storage all setup and things are workin as I am getting:

ActiveStorage::Blob Update (0.8ms)  UPDATE "active_storage_blobs" SET "metadata" = $1 WHERE "active_storage_blobs"."id" = $2 

in the terminal but my images are shouwing as broken images. Any ideas on how to fix this?

Posted in How do I display just the year in a sect date?

Got it, thanks Chris!

<%= form.date_select :year, :discard_day   => true, :discard_month => true, class: 'form-control' %>

Posted in How do I display just the year in a sect date?

Good day Rails Devs,

What's the proper way to dsiplay just the year in:

<%= form.date_select :year %>

Great job as alawys Chris, I'm creating an app with a Users model and Vehicles model, should I add the address to the Users model or the Vehicles model?

Posted in How to Build a Forum with Jumpstart Pro

Here is what it's showing:

  Prefix Verb   URI Pattern                                          Controller#Action
    discussion_posts GET    /discussions/:discussion_id/posts(.:format)          posts#index
                     POST   /discussions/:discussion_id/posts(.:format)          posts#create
 new_discussion_post GET    /discussions/:discussion_id/posts/new(.:format)      posts#new
edit_discussion_post GET    /discussions/:discussion_id/posts/:id/edit(.:format) posts#edit
     discussion_post GET    /discussions/:discussion_id/posts/:id(.:format)      posts#show
                     PATCH  /discussions/:discussion_id/posts/:id(.:format)      posts#update
                     PUT    /discussions/:discussion_id/posts/:id(.:format)      posts#update
                     DELETE /discussions/:discussion_id/posts/:id(.:format)      posts#destroy

Posted in How to Build a Forum with Jumpstart Pro

Here are my routes:

 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html

Rails.application.routes.draw do

  resources :discussions do
    resources :posts
  end
  # Jumpstart views
  if Rails.env.development? || Rails.env.test?
    mount Jumpstart::Engine, at: '/jumpstart'
    mount LetterOpenerWeb::Engine, at: "/letter_opener"
  end

  # Administrate
  authenticated :user, lambda { |u| u.admin? } do
    namespace :admin do
      if defined?(Sidekiq)
        require 'sidekiq/web'
        mount Sidekiq::Web => '/sidekiq'
      end

      resources :announcements
      resources :users
      namespace :user do
        resources :connected_accounts
      end
      resources :teams
      resources :team_members
      resources :plans
      namespace :pay do
        resources :charges
        resources :subscriptions
      end

      root to: "dashboard#show"
    end
  end

  # User account
  devise_for :users,
             controllers: {
               masquerades: 'jumpstart/masquerades',
               omniauth_callbacks: 'users/omniauth_callbacks',
               registrations: 'users/registrations',
             }

  resources :announcements, only: [:index]
  resources :teams do
    member do
      patch :switch
    end

    resources :team_members, path: :members
  end

  # Payments
  resource :card
  resource :subscription do
    patch :info
    patch :resume
  end
  resources :charges
  namespace :account do
    resource :password
  end

  resources :users
  namespace :user, module: :users do
    resources :connected_accounts
  end

  scope controller: :static do
    get :about
    get :terms
    get :privacy
    get :pricing
  end

  authenticated :user do
    root to: "dashboard#show", as: :user_root
  end

  # Public marketing homepage
  root to: "static#index"
end


Posted in How to Build a Forum with Jumpstart Pro

Hey Guys,

I'm following along with the How to Build a Forum with Jumpstart Pro video (https://www.youtube.com/watch?v=ZSom4V-nYxA&t=903s) and I am running into the error "The action 'create' could not be found for PostsController" when trying to reply to a discussion. Here are my files:

posts_controller.rb

class PostsController < ApplicationController
  before_action :set_discussion
  before_action :set_post, only[:edit, :update, :destroy]

  def create
    @post = @discussion.posts.new(post_params)
    @post.user = current_user

    if @post.save
      redirect_to discussion_path(@discussion, anchor: @post.id)
    else
      redirect_to @discussion, alert: @post.errors.full_messages.first
    end
  end

  def edit
  end

  def update
    if @post.update(post_params)
      redirect_to discussion_path(@discussion, anchor: @post.id)
    else
      redirect_to @discussion, alert: @post.errors.full_messages.first
    end
  end

  def destroy
    @post.destroy
    redirect_to @discussion
  end

  private

  def set_discussion
    @discussion = Discussion.find(params[:discussion_id])
  end

  def set_post
    @post = @discussion.posts.find_by!(id: params[:id], user: current_user)
  end

  def post_params
    params.require(:post).permit(:body)
  end
end

_post.html.erb

<div id="<%= dom_id(post) %>" class="flex pb-6 border-b mb-6 group">
  <div class="mr-6">
    <%= image_tag avatar_url_for(post.user), class: "rounded-full", height: 40, width: 40 %>
  </div>

  <div class="flex-1">
    <div class="mb-4">
      <span class="font-semibold"><%= post.user.name %></span>
      <span class> <%= link_to local_time_ago(post.created_at), discussion_path(@discussion, anchor: post.id), class: "ml-1 hover:underline text-gray-700"  %></span>
      <% if user_signed_in? && current_user == post.user %>
        <span class="text-gray-600">-</span> <%= link_to "Edit", edit_discussion_post_path(@discussion, post), class: "ml-1 hover:underline text-gray-700" %>
      <% end %>
    </div>

    <div>
      <%= post.body %>
    </div>
  </div>
</div>

edit.html.erb

<div class="container mx-auto my-8 px-4 max-w-3xl bg-white shadow p-8">
  <h1 class="h2 mb-6">Editing Post</h1>

  <%= form_with model: [@discussion, @post], class: "flex-1" do |form| %>
    <div class="form-group">
      <%= form.rich_text_area :body, data: { controller: "mentions", target: "mentions.field" } %>
    </div>

    <div class="form-group flex justify-between">
      <%= link_to "Delete", [@discussion, @post], method: :delete, class: "btn btn-link text-red-700", data: { remote: true, confirm: "Are you sure?" } %>
      <div>
        <%= link_to "Cancel", @discussion, class: "btn btn-link" %>
        <%= form.submit "Save Changes", class: "btn btn-tertiary", data: { disable_with: "Saving..." } %>
      </div>
    </div>
  <% end %>
</div>

discussion_controller.rb

class DiscussionsController < ApplicationController
  before_action :authenticate_user!, except: [:index, :show]
  before_action :set_discussion, only: [:show, :edit, :update, :destroy]

  # GET /discussions
  def index
    @pagy, @discussions = pagy(Discussion.all)
  end

  # GET /discussions/1
  def show
  end

  # GET /discussions/new
  def new
    @discussion = Discussion.new
    @discussion.posts.new
  end

  # GET /discussions/1/edit
  def edit
  end

  # POST /discussions
  def create
    @discussion = current_user.discussions.new(discussion_params)
    @discussion.posts.each{ |post| post.user = current_user }

    if @discussion.save
      redirect_to @discussion, notice: 'Discussion was successfully created.'
    else
      render :new
    end
  end

  # PATCH/PUT /discussions/1
  def update
    if @discussion.update(discussion_params)
      redirect_to @discussion, notice: 'Discussion was successfully updated.'
    else
      render :edit
    end
  end

  # DELETE /discussions/1
  def destroy
    @discussion.destroy
    redirect_to discussions_url, notice: 'Discussion was successfully destroyed.'
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_discussion
      @discussion = Discussion.find(params[:id])
    end

    # Only allow a trusted parameter "white list" through.
    def discussion_params
      params.require(:discussion).permit(:user_id, :title, posts_attributes: [:body])
    end
end

Great job guys I just purchased the pro version. Any idea on when the API feature will be available?

Regards
Rob

Posted in Gem for Questions

Thanks @eelcoj I give this a try!

Posted in Gem for Questions

Hey Rails Devs,

I'm developing an app and I want to send user random questions at random times on certain days. Are there any good Gems to do this or will I have to create something on my own?

Thanks in advance

I did and I got this:

yarn install v1.16.0
[1/4] 🔍  Resolving packages...
success Already up-to-date.
✨  Done in 0.45s.

I'm getting

error Command "webpack" not found.

The error is on the

<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>

Hey Chris ,

I'm getting this error:

Webpacker can't find application in /Users/robthomas/Dropbox/rails/sample/public/packs/manifest.json. Possible causes:

  1. You want to set webpacker.yml value of compile to true for your environment unless you are using the webpack -w or the webpack-dev-server.
  2. webpack has not yet re-run to reflect updates.
  3. You have misconfigured Webpacker's config/webpacker.yml file.
  4. Your webpack configuration is not creating a manifest. Your manifest contains: { }

Extracted source (around line #10):


    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>

Posted in To use Rails 6 or Not

Perfect, thanks Chris!!!

Posted in To use Rails 6 or Not

Hey Go Rails Fam,

I'm starting a new project this weekend and I was wondering should I user Rails 5.2.3 or just start the project with Rails 6.0.0.rc1? Let me know what you think.

Cheers
Rob

Posted in Connecting User with devise

Thanks @eelcoj I will definatly give this a try!

Posted in Connecting User with devise

Hello Go Rails Community,

I'm looking for some help, let's say I have an app that's for married couples. If the husband signs up for the app he hac send and invite to his wife and vice versa. What would be a good way to do the with deveise?

Posted in application.html.erb Help

Surthing!

logo Created with Sketch.

Ruby on Rails tutorials, guides, and screencasts for web developers learning Ruby, Rails, Javascript, Turbolinks, Stimulus.js, Vue.js, and more. Icons by Icons8

© 2020 GoRails, LLC. All rights reserved.