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\SQLEXPRWT_x86_ENU.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
In Windows: - 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
In Windows: - 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
In Windows: - 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:
ping 192.168.0.11
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.
In Navicat: - 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
Install Freetds
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'
Then:
bundle
## Set up the Connection in Rails
In your 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.