mobalean

We ♥ web applications!

At mobalean we love to build innovative web services for Japan and the world. Our experience will help transform your ideas into successful online services.

» more

Mobalean is lead by Henri Servomaa, the original founder and mobile developer. At Mobalean we strive to develop services which are loved by our clients and users. By working in an agile manner, quickly adapting to changing requirements, we can deliver quickly and often.

Henri Servomaa

Henri

Hailing from Finland, Henri has a long history with computers and the internet. With a background in Electrical Engineering and Computer Science, he has worked in Japan as Software Developer and System Admin since 2001. In 2005, he joined a company to develop mobile sites for the Japanese market and has been involved in mobile ever since.

Email
Email
Twitter
Twitter
Facebook
Facebook
Linkedin
Linkedin
github
github

Contractors

Cleve

Cleve Lendon is a Canadian engineer who has been contracting for Mobalean. He came to Tokyo in 1994, and has lived here ever since. He has broad experience as a software developer, which includes development of mainframe software, Internet applications and mobile apps (Android and iOS). He is especially skilled at writing Java applications (vd. Simredo 4, Grafikilo 15). When not programming, Cleve enjoys improv acting and studying languages, such as Latin and Esperanto.

Facebook
Facebook

Mobalean Alumni

Paul McMahon and Michael Reinsch were co-founders of Mobalean. They have moved to Doorkeeper KK, a company they established in 2013. Both are now actively developing the doorkeeper platform.

Web Development

Our strength is crafting web services for both Japanese and international markets. We bring our technical and cultural experience to help you adapt your ideas into successful products.

We develop with Ruby on Rails and use the best agile practices and tools, such as test driven development and continuous integration to achieve quality.

Japanese Mobile Consulting

We are the leading provider of technical expertise about the Japanese mobile web. Mobalean started when the smartphones were just appearing on the market. Our Keitai Web Technology Guide is a quick starting point for learning about the initial challenges of Japanese mobile development. Although the technology stacks have changed since the proliferation of iOS and Android, some of the idiosyncrasies remain. Most notably, the Japanese market is still very much dominated by the big three carriers: DoCoMo, au and Softbank. Developers can find more technical details in our Keitai-Dev Wiki.


Please contact us with your specific requirements.

Others

Originally developed here, Doorkeeper can now be found at doorkeeper inc.

Some of our clients

  • Reaktor Japan KK.

    Reaktor Japan, KK..

    http://www.reaktor.co.jp/
  • Ubiquitous Business Technology, Inc.

    Ubiquitous Business Technology, Inc.

    http://www.ubit.com/
  • PayPal Pte. Ltd.

    PayPal Pte. Ltd.

    http://www.paypal.com/
  • Robert Bosch Co., Ltd.

    Robert Bosch Co., Ltd.

    http://www.bosch.com/
  • GILT GROUPE K.K.

    GILT GROUPE K.K.

    http://www.gilt.jp/
  • Cerego Japan Inc.

    Cerego Japan Inc.

    http://www.cerego.com/
  • GMAP KK

    GMAP KK

    http://gmap.jp/
  • Mobikyo K.K.

    Mobikyo K.K.

    http://mobikyo.jp/
  • Native Creative Services

    Native Creative Services

    http://www.gonative.jp/
  • InnoviData GmbH

    InnoviData GmbH

    http://www.innovidata.de/
  • Sairis Group, KK

    Sairis Group, KK

    http://www.sairis.com/
  • Gerd Leonhard, MediaFuturist.com

    Gerd Leonhard, MediaFuturist.com

    http://www.mediafuturist.com/
  • Script Interactive

    Script Interactive

    http://www.script-interactive.com/

Send us a message

    

Send us an email

Email address: info@mobalean.com

Call us

If you prefer to call us, feel free to do so under +81 (0)70-6251-7245
For users of Skype, please call mobalean

Keeping your database in sync with your current branch

  

Posted by Michael Reinsch on 2013-03-03

With git, you will most likely find yourself working with branches a lot. Git makes working with branches very easy, and we love the benefits of feature branches.

Branching usually works great with Rails projects, all code and assets are in git. The only thing that gets in the way: the database. While the Database schema is versioned through migrations (which are again in git of course), the database itself is outside. And committing your database to git is a bad idea.

But it would be great to have your development database follow your current branch automatically, right? So for instance, when you switch from a feature branch to master to apply a bug fix, you'd like the database to automatically switch to the schema used in master. And then when you switch back to your feature branch, you'd like the database to be exactly the way you had left it.

For this reason we use SQLite for development. The database itself is just one file, and so we can manipulate it easily. Luckily Rails is also database agnostic (unless you're writing your own queries in SQL), so it is easy to use MySQL or PostgreSQL in production and SQLite for development. Using a build server and a good test coverage makes sure to catch any differences before they hit production.

For development, we use the following code to switch between database files based on the git branch. If a database file for a branch doesn't exist, it'll create a new copy based on the master database file.

The following module goes into lib/development_database_switch.rb:

module DevelopmentDatabaseSwitch

  def development_database
    branch_based_database("development")
  end

  def test_database
    branch_based_database("test")
  end

  protected
  def branch_based_database(base_name)
    # we only want to run git in dev/test modes
    master_db_name =  "db/#{base_name}.sqlite3"
    if git_branch_name
      branch_db = Rails.root.join("db/#{base_name}.#{git_branch_name}.sqlite3")
      FileUtils.cp Rails.root.join(master_db_name), branch_db unless branch_db.exist?
      branch_db.to_s
    else
      master_db_name
    end
  end

  def git_branch_name
    return unless Rails.env.development? || Rails.env.test?
    @_db_switch_branch_name ||= begin
      branch = `git branch --no-color`.match(/\\* (\\S+)\\s/m)[1]
      branch != 'master' && branch != '(no' ? branch : nil
    end
  end
end

We then include this module at the end of the Application class in config/application.rb:

module RailsAppName
  class Application < Rails::Application
    ...

    require "development_database_switch"
    include DevelopmentDatabaseSwitch
  end
end

Then in config/database.yml, we can now use:

default_sqlite: &default_sqlite
  adapter: sqlite3
  pool: 5
  timeout: 5000

default_mysql: &default_mysql
  adapter: mysql2
  host: localhost
  encoding: utf8
  pool: 5
  timeout: 5000

development:
  <<: *default_sqlite
  database: <%= Rails.application.development_database %>

test:
  <<: *default_sqlite
  database: <%= Rails.application.test_database %>

production:
  <<: *default_mysql
  database: production
  username: user
  password: password

We are quite happy with this setup, as it allows us to more rapidly switch between branches, without having to remember to rollback or migrate the database all the time.

In addition, there is now one more reason to branch: whenever I create a migration these days, I also create a feature branch. That way I can easily undo any changes by removing the feature branch's database file. No more worries about half executed migrations or issues when rolling back, leaving the database in a broken state.

  



Archive

2021-01-12   Upgrading Rails, 3.2 to 5.2
2016-12-05   Upgrading Ruby, 1.8 to 2.3
2016-02-16   Do you have entropy?
2015-11-09   Asset Pipeline for Clojure
2015-10-29   New logo for mobalean and other announcements
2013-03-03   Keeping your database in sync with your current branch
2013-02-24   Running Rails tests on a CI server
2013-01-31   Text Files as a CMS
2012-10-05   Truncating Text With CSS
2012-09-28   Mobalean becomes a Heroku partner
2012-05-08   Cleaning up your CSS with selectors
2012-03-15   請求書.jpのスタンドファーム社への譲渡について
2012-01-13   The Joy of Gems: Cooking up Rails Plugins
2011-09-08   Dynamic Methods vs. Method Missing
2011-09-02   Guessing a String's Encoding Under Ruby 1.9
2011-08-02   PDF generation and Heroku
2011-07-20   A Step Towards Internationalizing the Japanese Ruby Community
2011-07-14   Rubyを使っての英語学習
2011-06-29   Using the Asset Pipeline under Rails 3.1
2010-12-03   Updating a real world application to Rails 3
2010-11-19   Seamless Rails integration with jQuery Tools Dateinput
2010-11-12   Kara-mail for Japanese mobile sites
2010-10-14   Challenges faced creating a mobile site in Japan
2010-09-02   Announcing Tokyo Rubyist Meetup
2010-08-20   Keitai Web Technology Guide
2010-08-16   delayed_job (and other daemons) in a production environment
2010-07-04   Announcing Doorkeeper: Easy Event Ticketing and Check-in
2010-04-09   Enabling url parameter based sessions in Ruby on Rails
2010-02-15   Mobalean and Keitai-dev Wiki merge
2010-02-05   mobalean WURFL patch merged into core WURFL
2010-01-27   IMJ Mobile Releases Free Collection of Mobile Surveys
2009-12-04   KEITAIALL: Specs on all Japanese Mobiles
2009-11-19   Betrend releases report on mobile access in Japan
2009-11-16   XHTML support and Japanese Carriers
2009-06-10   mobalean releases Japanese WURFL patch, ruby libraries
2009-05-22   docomo to support JavaScript, external CSS, cookies, and more
2009-05-15   New docomo handsets to support cookies and send referrers?
2009-03-16   Japanese Mobile Support for Cake PHP
2009-03-05   mobalean to present at next Tokyo 2.0
2009-03-02   emobile wireless Internet access with Linux
2009-02-28   Hacking Ruby's default arguments
2009-02-25   docomo to launch SNS
2009-02-10   Ninjava Presentation
2009-02-10   Six weeks in
2009-02-06   Automatic Deployment via git
2009-02-01   Hosting git repositories
2009-01-30   mobalean Blog Live

mobalean

  • Home
  • About
  • Services
  • Clients
  • Contact
  • Blog

Social Links

Twitter
Facebook

Recent blogs

  • Upgrading Rails, 3.2 to 5.2
  • Upgrading Ruby, 1.8 to 2.3
  • Do you have entropy?
  • Asset Pipeline for Clojure
  • New logo for mobalean and other announcements

© 2009 - 2023 mobalean