10 Older Entries »
We recently had to drop a column in production, from a relatively large (order of 10⁷ records) table.
On modern MySQL setups, dropping a column doesn’t lock the table (it does, actually, but for a relatively short time), however, we wanted to improve a very typical Rails migration scenario in a few ways:
- offloading the column dropping time from the deploy;
- ensuring that in the time between the column is dropped and the app servers restarted, the app doesn’t raise errors due to the expectation that the column is present;
- not overloading the database with I/O.
I’ll give the Gh-ost tool a brief introduction, and show how to fulfill the above requirements in a simple way, by using this tool and an ActiveRecord flag.
This workflow can be applied to almost any table alteration scenario.
One big drawback of Single-page application is the ability to fully support SEO as traditional sites. The reason is because in a single-page application we often use a technique called lazy-rendering, in which the real content is not rendered from the server but only the basic layout is returned. Many search engine crawls your websites similar to how you use "curl" command to fetch the content of the website, which prevents the search engine from understanding what is really inside the web page and it can not index the page correctly. In this post, I am going to show you how we can use PhantomJS to tackle this issue.
The main idea of this post is taken from this blog page: http://davidchin.me/blog/create-seo-friendly-angularjs-app/, you might want to read it for more information. I will explain it using my own words and this can apply to any single-page …[Read more]
Since Ruby on Rails 4.2 has just been released, perhaps now is a good time to review creating a shiny new Rails project. It’s not often I get to create a new project from scratch, but it’s Christmas and I’ve got a bit of downtime — and an itch I’d like to scratch! So, let’s get started.
I’m aiming to build a wee project that keeps track of OmniFocus perspectives. I’ve noticed that people are sharing their perspectives as screenshots and descriptions, in tweets and blog posts. Wouldn’t it be awesome if there was a one-stop-shop for everybody’s perspectives?
A couple of early decisions in terms of the basic starting point:
- Chances are I’ll deploy the app onto Heroku, so it’s a no-brainer to start out by using PostgreSQL in development. (Even …
[Rails] Unicorn ignores SIGUSR2 completely?:
It doesn’t. See the link.
If you use the God gem to manage your Ruby on Rails application server (Unicorn, for example), you will have to restart the application server using God after deploying a new version.
I found a solution that polls the application’s tmp directory for restart.txt (like Phusion Passenger does) from within the god configuration and restarts the app if the file is touched. However, it didn’t work well for me because the ps syntax varies on different systems and the method is not very reliable (it triggered when I didn’t want it to, and vice versa).
So I thought about it and now I think that the best solution to restart an app via god is to do (surprise):
god restart YOUR-APP
And it should be done exactly if capistrano deploys, and …[Read more]
I had a very strange problem concerning my Ruby on Rails installation, using FreeBSD, nginx, Unicorn and God.
When starting god from the command line as root, everything worked. However, as soon as I placed the god command into /etc/rc.local or a even service file in /usr/local/etc/rc.d, god didn’t start the Unicorn server but showed exit code 127 for “bundle exec unicorn -E production -c config/unicorn.rb”.
So I added a log directive to the god configuration and looked at the log file. It said:
env: ruby1.9: No such file or directory
Then I changed the god configuration to include /usr/local/bin in the PATH and now everything works. Here my configuration file:
RAILS_ROOT = '/srv/www/my-project-prod/current' God.watch do |w| w.name = 'my-project' w.interval = 30.seconds w.uid = 'my-project' w.gid = 'my-project' w.pid_file = File.join(RAILS_ROOT, …
This week, after 3 months in the works, we’ve finally released version 1.7.0 of DbCharmer ruby gem – Rails plugin that significantly extends ActiveRecord’s ability to work with multiple databases and/or database servers by adding features like multiple databases support, master/slave topologies support, sharding, etc.
New features in this release:
- Rails 3.0 support. We’ve worked really hard to bring all the features we supported in Rails 2.X to the new version of Rails and now I’m proud that we’ve implemented them all and the implementation looks much cleaner and more universal (all kinds of relations in rails 3 work in exactly the same way and we do not need to implement connection switching for all kinds of weird corner-cases in ActiveRecord).
- Forced Slave Reads functionality. Now …
XKCD (as usual) makes a very good point – this time about password strength, and I reckon it’s something app developers need to consider urgently. Geeks can debate the exact amount of entropy, but that’s not really the issue: insisting on mixed upper/lower and/or non-alpha and/or numerical components to a user password does not really improve security, and definitely makes life more difficult for users.
So basically, the functions that do a “is this a strong password” should seriously reconsider their approach, particularly if they’re used to have the app decide whether to accept the password as “good enough” at all.
Update: Jeff Preshing has written an xkcd password generator. Users probably should choose their own four …[Read more]
Studing JRuby and Rails I faced some encoding problems. The solution was very easy. First you must have to create your database using utf8 character set. In case you are using MySQL, just do the following:
CREATE DATABASE `yourdatabasename` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER DATABASE yourdatabasename CHARACTER SET utf8 COLLATE utf8_general_ci;
If you already have a database with records, read this post from @akitaonrails.
In my case, I’m using the activerecord-jdbc-adapter gem, and connecting to the database through the MySQL JDBC …[Read more]
10 Older Entries »