Fix error: Missing the mysql2 gem
So you got this error, even though your Gemfile bundles mysql2
:
!!! Missing the mysql2 gem. Add it to your Gemfile: gem 'mysql2'
or
Please install the mysql adapter: `gem install activerecord-mysql-adapter` (mysql is not part of the bundle. Add it to Gemfile.)
The reason for this confusing error message is probably that your Gemfile says mysql2
, but your database.yml
still uses the mysql
adapter. Change it to use the mysql2
adapter:
development:
adapter: mysql2
database: myproject_developm...
rspec_candy 0.2.0 now comes with our most popular matchers
Our rspec_candy gem now gives you three matchers:
be_same_number_as
Tests if the given number is the "same" as the receiving number, regardless of whether you're comparing Fixnums
(integers), Floats
and BigDecimals
:
100.should be_same_number_as(100.0)
50.4.should be_same_number_as(BigDecimal('50.4'))
Note that "same" means "same for your purposes". Internally the matcher compares normalized results of #to_s
.
be_same_second_as
...
Don't follow Ajax requests with a redirect
The behaviour of browsers is very inconsistent when an Ajax request is answered with a redirect. Highlights are:
- IE 9 will follow a DELETE request with a second DELETE. You never want that.
- Firefox will follow a POST request with a GET, as you might expect. If a PUT is redirected however, you will get a confirmation dialog, where you can choose to follow with a second PUT or simply abort. You don't want that either.
RubyMine 4.5.1: Sass/SCSS Support Improvements
A number of issues concerning Sass/SCSS autocompletion and syntax highlighting were submitted as a feedback for RubyMine 4.5. Web development with Rails can’t do without Sass/SCSS code writing so we’ve decided to fix the most annoying bugs as soon as possible.
MySQL 5.6 will expose tables as key/value stores through memcached, might be awesome
The next version of MySQL will include a built-in memcached daemon. This daemon can quickly get and set key/value pairs from and to InnoDB tables while completely bypassing the parsing and planning overhead of SQL.
This could potentially be very awesome because we would then have a distributed key/value store that stores data in a way it can also be queried with complex SQL queries.
Modifying Rake Tasks - Dan Manges's Blog
For custom Rake tasks, you shouldn't need to modify them after the original definition. However, if you want to add behavior to some vendor tasks (such as those defined with Rails), this blog post will cover how to do that.
assignable_values 0.4.1 adds secondary default values
assignable_values now lets you define a secondary default that is only used if the primary default value is not assignable:
class Song < ActiveRecord::Base
assignable_values_for :year, :default => 1999, :secondary_default => lambda { Date.today.year } do
(Date.today.year - 2) .. Date.today.year
end
end
If called in 2013 the code above will fall back to:
Song.new.year # => 2013
This is especially useful in authorization scenarios with [Consul](https://github....
Remove the module namespace of a qualified Ruby class name
You can use String#demodulize
from ActiveSupport:
"ActiveRecord::CoreExtensions::String::Inflections".demodulize # => "Inflections"
"Inflections".demodulize # => "Inflections"
Gem development: When your specs don't see dependencies from your Gemfile
When you develop a gem and you have a Gemfile
in your project directory, you might be surprised that your gem dependencies aren't already required in your specs. Here is some info that should help you out:
- Bundler actually doesn't automatically require anything. You need to call
Bundler.require(:default, :your_custom_group1, ...)
for that. The reason why you never had to write this line is that Rails does this for you when it boots the environment. - That also means that if you have an embedded Rails app in your
spec
folder (like [h...
Consul 0.4.0 released
Consul 0.4.0 comes with some new features.
Dependencies
- Consul no longer requires
assignable_values
, it's optional for when you want to use theauthorize_values_for
macro. - Consul no longer uses
ActiveSupport::Memoizable
because that's deprecated in newer Railses. Consul now uses Memoizer for this.
Temporarily change the current power
When you set Power.current
to a power in an RS...
Market share of web browsers
The usage shares of your site highly depends on your target audience. E.g. no Internet Explorer has ever seen hollyapp.com, but that's because of its tech-savvy audience. Distribution will also differ by other factors, such as region. See this Wikipedia article for details.
If you don't know your audience, you can use the stats of tracking tools, which see a lot of traffic go by a wide variety of sites. Some of these are:
- [W3Counter](http://www.w3counter...
Check if an object is an ActiveRecord scope
Don't say is_a?(ActiveRecord::NamedScope::Scope)
because that is no longer true in Rails 3 and also doesn't match unscoped ActiveRecord classes themselves (which we consider scopes for all practical purposes).
A good way is to say this instead:
object.respond_to?(:scoped)
Use the "paper_trail" gem to track versions of records
paper_trail
is an excellent gem to track record versions and changes.
You almost never want to reimplement something like it yourself. If you need to log some extra information, you can add them on top.
It comes with a really good README file that holds lots of examples. I'll show you only some of its features here:
-
Setting up a model to track changes
: Just addhas_paper_trail
to it:
class User < ActiveRecord::Base
has_paper_trail
end -
Accessing a previous version
: Sayinguser.previous_version
gi...
Updated: Remove quotes from Sass mixin arguments
When we looked at this card together a year ago, we were no longer sure if unquote
is actually useful. I now found a good example for when you need unquote
, and rewrote the card accordingly.
Updated: assignable_values can now humanize any given value, even if it's not the current attribute
You've always been able to access the humanized version for the current value like this:
song = Song.new(:genre => 'pop')
song.humanized_genre # => 'Pop music'
You can now also retrieve the humanized version of any given value by passing it as an argument:
song.humanized_genre('rock') # => 'Rock music'
How to change will_paginate's "per_page" in Cucumber features
The will_paginate
gem will show a default of 30 records per page.
If you want to test pagination in a Cucumber feature, you don't want to create 31 records just for that.
Instead, you probably want to modify the number of items shown, by saying something like this:
Given we paginate after 2 users
Using the following step definition, you now can! :)
require 'cucumber/rspec/doubles'
Given /^paginate after (\d+) (.*)$/ do |per_page, model_name|
model = model_name.singularize.gsub(/...
Maximum size of a MySQL query
Unless you changed the default, this will be 16 MB:
mysql> SHOW VARIABLES WHERE Variable_name="max_allowed_packet";
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
Using the Rake Build Language
Rake (like make) allows you to add dependencies to a task after you've initially declared it. Indeed it allows you to continue to talk about a task in multiple places. This way I can decide to add dependencies close to the pre-requisite task.
When Date.today and Date.tomorrow return the same day...
... you probably have a time zone issue.
When you get
Timecop.travel(Date.parse("2011-11-11 00:00") do
Time.current # Thu, 10 Nov 2011 23:00:01 UTC +00:00
Time.now # Fri Nov 11 00:00:02 +0100 2011
Date.today # Fri, 11 Nov 2011
Date.tomorrow # Fri, 11 Nov 2011
end
you probably haven't defined a zime zone yet.
So might fix this by adding the following lines to your application.rb
:
class Application < Rails::Application
config.time_zone = 'Berlin' # or whatever your time zone
end
It se...
When connecting to a second database, take care not to overwrite existing connections
Sometimes, you may want to open up a second database connection, to a read slave or another database. When doing that, you must make sure you don't overwrite an existing connection.
The problem
While this may look good, it will actually cause all kinds of trouble:
def with_other_database
ActiveRecord::Base.establish_connection(slave_settings)
yield
ensure
ActiveRecord::Base.establish_connection(master_settings)
end
Putting aside that you are setting the general connection here (not generally a ...
MySQL operator precedence
Take care in queries where multiple AND or OR operators are used. In doubt, always use braces to enforce precedence.
Asset pipeline for Rails 2
The asset pipeline from Rails 3.1 packported to 2.3. By Michael Grosser from parallel_tests fame.
Request limit of graph.facebook.com
The facebook API allows up to 600 requests per 600 seconds.
If you poll more often, you'll get no or malformed answers.