Ruby/Rails Machine Setup Guide
Tags: ruby, rails, vscode, sublime
Published: 2021-01-13 19:51:23

## 1- IDE
We prefer to use `sublime`/`VS Code` for development(you can opt for any IDE though, but that will mean no support from seniors for any issues relating it and that might lead to un-neccessary time waste thats why it is highly preferred to not use any other IDEs). You are encouraged to use sublime or VSCode.

### Sublime:
Install Sublime3 (google or [use this link](https://www.sublimetext.com/3))
Here we will outline some basic configuration for sublime3 we usually use.

i- **Settings Tweaks**
In sublime go to `preferences->settings` and place these in **user settings** tab along with other settings.
Don't mess with default settings tab

```
{
  "auto_complete_commit_on_tab": true,
	"auto_complete_triggers":
	[
		{
			"characters": "b4",
			"selector": "text.html"
		}
	],
	"auto_indent": true,
	"caret_style": "phase",
	"color_scheme": "Packages/Color Scheme - Default/Monokai.sublime-color-scheme",
	"draw_minimap_border": true,
	"draw_white_space": "all",
	"enable_tab_scrolling": false,
	"ensure_newline_at_eof_on_save": true,
	"file_exclude_patterns":
	[
		"*.pyc",
		"*.pyo",
		"*.exe",
		"*.dll",
		"*.obj",
		"*.o",
		"*.a",
		"*.lib",
		"*.so",
		"*.dylib",
		"*.ncb",
		"*.sdf",
		"*.suo",
		"*.pdb",
		"*.idb",
		"*.class",
		"*.psd",
		"*.db",
		"*.beam",
		".DS_Store",
		".tags"
	],
	"folder_exclude_patterns":
	[
		".svn",
		".git",
		".hg",
		"CVS",
		".sass-cache"
	],
	"font_options":
	[
		"gray_antialias"
	],
	"font_size": 15,
	"gutter": true,
	"highlight_line": true,
	"highlight_modified_tabs": true,
	"ignored_packages":
	[
		"CoffeeScriptHaml",
		"Emmet",
		"ESLint",
		"Markdown",
		"Ruby Completions",
		"SublimeLinter-contrib-eslint_d",
		"SublimeLinter-eslint",
		"Vintage"
	],
	"line_numbers": true,
	"line_padding_top": 0,
	"mouse_wheel_switches_tabs": false,
	"overlay_scroll_bars": "enabled",
	"preview_on_click": true,
	"rulers":
	[
		120
	],
	"scroll_past_end": false,
	"show_tab_close_buttons": false,
	"tab_size": 2,
	"theme": "Adaptive.sublime-theme",
	"translate_tabs_to_spaces": true,
	"trim_automatic_white_space": true,
	"trim_trailing_white_space_on_save": true,
	"use_tab_stops": true,
	"wide_caret": true,
	"word_separators": "./\\()\"'-:,.;<>@#$%^&*|+=[]{}`",
	"indent_using_spaces": true,
	"index_files": true,
	"line_padding_bottom": 2,
	"line_padding_top": 0,
	"rulers":
	[
		90,
		100,
		120
	],
	"show_sidebar_on_save": false,
	"spell_check": true,
	"tab_width": 2,
	"word_wrap": false
}
```
Have an eye for any redundency in settings and replace that if there is any.

This will make indentation more easy, as indentation is one of the most important things for code quality and useability.

ii- **Sublime Package Control**
Install package control following:
[This link](https://packagecontrol.io/installation)

After that, you can access package control in preferences and install any package you need(Like gitgutter, A file icon, beautifyruby, brackethighlighter etc).

*Here is the list of some handy packages in sublime, you can install them in some spare time. Not required but helpful for development.*
iii- **Useful Sublime Packages:**
```
A File Icon
All Autocomplete
Better CoffeeScript
Bootstrap 3 Autocomplete
BracketHighlighter
Cucumber Step Finder
Cucumber
Dockerfile Syntax Highlighting
Emmet
GitGutter
HTMLBeautify
Javascript Beautify
MarkdownEditing
Package Control
RecentActiveFiles
RSpec
RuboCop
Ruby Hash Converter
Ruby Slim
Sass
SassBeautify
SCSS
SideBarEnhancements
SublimeLinter-contrib-scss-lint
SublimeLinter-rubocop
YAML Nav
```

### VSCode:

Download and install VSCode from [here](https://code.visualstudio.com/download)

Recommended settings for VSCode:
```    
	"ruby.useLanguageServer": true,
	"ruby.format": "rubocop",
	"ruby.intellisense": "rubyLocate",
	"ruby.useBundler": true,
	"ruby.rubocop.useBundler": true,
	"[ruby]": {
		"editor.defaultFormatter": "misogi.ruby-rubocop"
	},
	"editor.tabSize": 2,
	"files.insertFinalNewline": true,
	"telemetry.enableTelemetry": false,
	"window.titleBarStyle": "custom",
	"files.trimTrailingWhitespace": true,
```

Add these settings in `File > Preferences > Settings` (open the settings in json)

Following are some recommended extension for VScode. Please run the following commands on terminal for installing the extensions:

```
code --install-extension castwide.solargraph
code --install-extension dbaeumer.vscode-eslint
code --install-extension donjayamanne.githistory
code --install-extension eamodio.gitlens
code --install-extension HookyQR.beautify
code --install-extension IBM.output-colorizer
code --install-extension mhutchie.git-graph
code --install-extension misogi.ruby-rubocop
code --install-extension rebornix.ruby
code --install-extension wheredoesyourmindgo.gruvbox-concoctis
code --install-extension wingrunr21.vscode-ruby
```

You can install these through command line, one by one using the command: `code --install-extension $EXT_NAME`.

## 2- Ruby environment/version manager with Rails Setup

Link for [Ruby/Rails/Rbenv/Postgres Setup](https://gorails.com/setup/ubuntu/20.04)
**Note: Please do the following while going through the above article.** 
1. Please install and use **RBENV**. Skip **RVM**
2. Please install **Ruby version 2.6+ / Rails version 6 / Postgres version 11**
3. Please set the Postgres username to `postgres` with password `postgres` - **MUST**
4. Please skip **Configuring Git**


## 3- Database

It is preferred to use **postgresql** dbms for development, as it is a de-facto standard in most rails applications. Books may be using sqlite 3 but it is encouraged to use postgresql. 

**TIP:** If you keep an eye on what these commands actually are doing, that will be beneficial for you. Like you can give 2-4 mins on reading about **apt-get** and what it actually does, give 2 minutes to read about **sudo** or any new command like **curl** if you don't know about it, this will help you **grip ubuntu/linux quickly.** 

## Terminal
1. For Fancy/Pretty Diff -> https://github.com/so-fancy/diff-so-fancy
2. For common git aliases, run the following commands on terminal: 
```
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
```




NOTE: Some parts of this guide are extracted from https://gist.github.com/ziaulrehman40/16445c56e3f7bc7d1dece245fb61cf8e