I recently had to set up a MS SQL database on my Mac for a client project, if you ever have to do this here is a mini tutorial.
In this post I am using VMWare Fusion for virtualisation, but you could use something else and the instructions should be mostly portable.
Get a Windows VM
Go to https://www.modern.ie/en-us/virtualization-tools and download a VM (Virtual Machine) for your Mac. I will be using Windows 7 (the version of IE doesn't matter).
Install the virtual machine and log in.
Get MS SQL Express with tools
As you download the Windows VM you can also download the free version or MS SQL.
At the time of writing the tiny_tds gem - the gem needed to access MS SQL - only supports MS SQL up to version 2012. So version 2014 won't work.
Go to http://www.microsoft.com/en-au/download/details.aspx?id=29062 and download MS SQL Express 2012, make sure to get the version with tools (named something like ENU\x86\SQLEXPRWTx86ENU.exe).
Install MS SQL Express
If you downloaded MS SQL Express on your Mac, you will need to make it accessible to your Windows VM. If you are using Fusion you can simply drag and drop the installer to Windows.
Run the installer and just install the default components. Accept the defaults in all other screens.
Create a DB for testing
In Windows, open SQL Server Management Studio. Connect using the provided defaults, then:
- Right click on Databases
- Click on New Database
- Add a name e.g. Test
- Click OK
Enable SQL Authentication
Still in SQL Server Management Studio:
- Right click on the root of the tree e.g. IE11WIN7\SQEXPRESS
- Select Properties
- Select Security
- Enable SQL Server and Windows Authentication mode
- Click OK
Create a database user
In Management Studio:
- Click on Security on the tree
- Right click on Logins
- Select New Login
- Add a use e.g. dbuser
- Select SQL Server authentication
- Add a password
Set user mappings
In the same screen:
- Click on User Mapping
- Check the previously created DB e.g. Test
- Click the ... button on the right
- In the pop up window, select Browse
- Check dbo and OK
- Select OK again
- Select db_owner on the bottom
- Finally click OK
You can then close Management Studio.
Enable TCP in Express
In Windows, open SQL Server Configuration Manager. Then:
- Click on SQL Server Network Configuration
- Click on Protocols for SQLEXPRESS
- Double click on TCP/IP on the right.
- Change Enabled to Yes
- Click on IP Addresses
- Scroll down all the way to IPAll
- Set the TCP Port e.g. 1433
- Click OK
Restart SQL (in the same window):
- Click on SQL Server Services
- Right click on SQL Server on the right and select Restart
We can now close SQL Server Configuration Manager.
Disable the Windows Firewall
- Go to the Control Panel
- Search for firewall and open the Windows Firewall settings
- Click on Turn Windows Firewall on or off on the left
- On the Home network settings, click on Turn off Windows Firewall
- Click OK and close the control panel
Find the IP address for the VM
- Click on the network icon on the bottom bar
- Click on Open Network and Sharing Center
- Click on the link on Connections e.g. Local Area Connection
- Click on Details
- Take note of the IPv4 Address e.g. 192.168.0.11 in my case, this is the IP our VM is running on
Set network location to home
- Open the Network and Sharing Center as in the previous step
- Click on the link under Network if it says 'Public network'
- Click on Home network in the pop up window
- Click Next several times and then Finish
The Network should be set to 'Home network'
Test the connection from the Mac terminal
In the mac terminal test the connection to the Windows VM:
Note that the IP address will most likely be different on your machine.
This should give you a successful ping. If you get a timeout double check the network settings and firewall in Windows.
Test the connection to MS SQL
If you have an application that can connect to MS SQL on the Mac, I recommend testing the connection from there first before going to Rails. I am using Navicat in my case. Otherwise just skip this step.
- Create a new connection for MS SQL
- Set the IP Address to your VM IP e.g. 192.168.0.11
- Set the port as set previously e.g. 1433
- Set Initial Database to the DB created previously e.g. Test
- Set User Name and Password as created previously
- Test the connection
In order to connect to MS SQL, we need to install the necessary libraries in our Mac. Install freetds using homebrew, in the Mac terminal:
brew update brew install freetds
Add the tiny_tds gem to your project
In your Gemfile:
gem 'tiny_tds', '~> 0.6'
Set up the connection in Rails
database.yml, add / modify an entry for using the MS SQL db:
mssql: adapter: sqlserver host: 192.168.0.11 port: 1433 database: Test username: dbuser password: 123456 pool: 5 timeout: 5000
Take care to set the values as set previously i.e. host, port, username and password.
When this is done, your Rails application should now be able to connect to the MS SQL Express server running on the VM.
Proxying Outbound HTTP Requests Through Static IP Addresses on...
reinteractive is presenting at Dreamforce 2019!
How do you Successfully Manage a Software Development Project?
reinteractive is Australia’s largest dedicated Ruby on Rails development company. We don’t cut corners and we know what we are doing.
We are an organisation made up of amazing individuals and we take pride in our team. We are 100% remote work enabling us to choose the best talent no matter which part of the country they live in. reinteractive is dedicated to making it a great place for any developer to work.
Webinars are our online portal for tips, tricks and lessons learned in everything we do. Make the most of this free resource to help you become a better developer.
The Ruby on Rails Installfest includes a full setup of your development environment and step-by-step instructions on how to build your first app hosted on Heroku. Over 1,800 attendees to date and counting.
The Ruby on Rails Development Hub is a monthly event where you will get the chance to spend time with our team and others in the community to improve and hone your Ruby on Rails skills.