hetal sharma

Joined

150 Experience
0 Lessons Completed
0 Questions Solved

Activity

I have 2 MySQL instances. One is master and the second is a slave. I want to configure the rails app in a way that if the connection to my master database failed, then auto-connect to the slave database and slave will become master. In this way, the site will never go offline due to the MySQL server crash.
But I am not able to find any solution in rails with mysql2 adapter to do so. Can anyone help me with this?

Posted in Rails App configurations for AWS CodeBuild

I have a rails application that is deployed on AWS EC2 instance with CodePipeline. I have added the Build stage in the pipeline using AWS CodeBuild to build test my code.

I have no idea about where to add below rails command to execute whenever code auto-deploy using the pipeline.

  1. bundle install
  2. rake db:migrate, create, assets compile
  3. Restart sidekiq

Posted in How to version model validations for an API?

Why is API versioning necessary at all? It is required for when we want to make some breaking changes to an API endpoint, like stop accepting certain parameters or if we remove some part of the response, which clients, already consuming our API, expect. In that regard it is pretty straight forward how we do this:

  • we create a new folder namespace api/v2.
  • we put there the controller, containing the new version of the endpoint api/v2/controllers/locations_controller.rb;
  • we implement our controller action;
  • maybe for the response we use a different active model serializer/jBuilder template.

However, what do we do, if we want to change the validation rules for a model? Let's assume, we have a field foo, which in version 1 of the API, accepts three values a, b and c. So in the model we have a validaiton like so:

validates :foo, inclusion: { in: %w(a b c) }

Now we want to remove one of the values (a)and add a new value (d). If we just change the validaiton in the model to

validates :foo, inclusion: { in: %w(b c d) }

we'll have at least two problems I can think of:

  1. If a client of the old endpoint sends value a for parameter foo they'll get a validation error.
  2. If we update another attribute bar of an existing record through the new point, which has value a for foo (set in the past through the old endpoint), then we'll get a validation error, that foo is not included in the list (which will be quite unexpected, as we update bar and don't expect to get any errors for foo, which we don't touch at all).

I'd like to hear your thoughts on such problems with API versioning. Thank you.