Ruby on Rails Environment Setup on Windows 10

Windows with Ruby on Rails installed on Ubuntu Virtual Box

I am new to Ruby on Rails and I was asked to setup my Ruby on Rails local environment for work without any help from anyone. I spent a couple of weeks trying to install it on windows only to realize that there were too many gem unavailability issues in windows for the setup of the ruby application.

I tried the following before I ended up working almost completely from within a Linux Virtual Box Client.

  • Windows + Ruby + Source Code:
    • Install Ruby on Rails using the Rails installer and / or Ruby installer on Windows 10 with existing source code and gem bundles.
    • This failed because there were too many gems that were needed by the application that we were not available on windows version of Ruby.
  • Windows + (Linux Virtual Box + Ruby) + Source Code:
    • Install Ubuntu on Virtual Box. And Setup Ruby in Ubuntu while having the IDE and Source Code on Windows with the source code folder shared into the Virtual box using Guest Additions for running the WEBrick server and gem installations.
    • This failed because when doing the bundle install command from Linux Virtual Box on the shared windows source code folder failed due to permission issues.
  • Windows + (Linux Virtual Box + Ruby + Source Code):
    • Install Ubuntu on Virtual Box. And Setup your IDE, Ruby, and source code in Ubuntu. SSH into Virtual Box and access your application from your Windows Host using a host only virtual box network adapter.
    • This works for me because of the seamless mode in virtual box guest additions.
  • Ubuntu:
    • Install Ubuntu as a second OS with dual boot setup. And setup your IDE, Ruby, and source code in Ubuntu.
    • This works but doesn’t give the same comfort level or speed of development as Windows (to me).

So I am using the Windows + (Linux Virtual Box + Ruby + Source Code) setup for working with Ruby on Rails development now. I access the web application via browser on Windows and do all development on the Ubuntu virtual box using seamless mode.

Git Prune for Cleanup

When you or a team member removes a few branch from your remote git repository as part of cleanup and you still see the branches on your local environment you will have to run the git command below to remove (prune) all the branches from your local that do not exist on the remote repository anymore.

git fetch -p

GIT BFG

If you ever committed a large file (over 50 MB) in your git repository and are having issues pushing to the repository, you will have to use the BFG tool to delete the large file not only from the latest commit but also from the history of all commits in your repository to work properly on github.

if you see a similar error when pushing :

Counting objects: 387, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (349/349), done.
Writing objects: 100% (387/387), 402.76 MiB | 7.53 MiB/s, done.
Total 387 (delta 108), reused 48 (delta 36)
remote: warning: File /xxxxxxxxxxmpg is 51.10 MB; this is larger than GitHub’s recommended maximum file size of 50.00 MB
remote: error: GH001: Large files detected. You may want to try Git Large File Storage – https://git-lfs.github.com.
remote: error: Trace: d051ecdf77d64a9b66a168bcb9608b85
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File docroot/sites/Black_Eyed_Peas_Concert.3gp is 334.19 MB; this exceeds GitHub’s file size limit of 100.00 MB
To [email protected]:xyxuhjhj.git
! [remote rejected] master -> master (pre-receive hook declined)

do the following after downloaidng the BFG tool: (Courtesy: BFG Tool)

git clone --mirror git://example.com/some-big-repo.git
java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git
$ cd some-big-repo.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive

GIT Cherry Picking

Today I had to commit one change into two different branches (master and google). After googling for some time I found out that GIT has a way of picking one commit hash from a branch and apply it onto another branch.

i.e. If we commit a change into google branch and want that commit to be applied into the master branch too then we get the hash code of the commit from the google branch using the command “git log” and apply the commit hash onto the master branch using the following command.

git cherry-pick [commit-hash]

The sequence of commands in my case was as follows: (branches master and google):

git checkout google
git pull origin google

[always pull before commit and push]

git commit -a -m "committing all changes to google branch"
git push origin google
git log

[get the hashcode for the commit above and lets call it 62abc3]

git checkout master
git pull 

[always pull before commit and push]

git cherry-pick 62abc3

 

$10 e-Movie Cash for Avengers: Age of Ultron with pruchase of Kellogg’s Eggo Waffles 24 pak for $4.78 at Walmart

$10 e-Movie Cash for Avengers: Age of Ultron with pruchase of Kellogg’s Eggo Waffles 24 pak for $4.78 at Walmart

Verizon FiOS Triple Play – Internet, TV, Phone for $74.99 with 2 years contract and $300 Gift Card

Verizon FiOS Triple Play – Internet, TV, Phone for $74.99 with 2 years contract and $300 Gift Card