If the time is incorrect on something that you insert directly into the database when using Rails (off by several hours), try ensuring that you are using the correct modifier to get it into the right time zone. For example, instead of doing DateTime.now, try DateTime.now.utc if you are using UTC as your default timezone.
I looked around and there was seemingly no easy way to convert Rails apps to use Slim instead of ERB. There was a gem out there, but it didn’t seem to work for me.
The general process I used was to first convert ERB to Haml using Haml’s haml2html. Next, convert Haml to Slim using haml2slim.
Convert ERB to Haml
Ensure you have Haml installed, preferably using your Gemfile if using Bundler. You can probably remove Haml when you are done with this process.
I got much inspiration from this article on the conversion process.
# to test what you will convert
find . -name '*html.erb' | \
xargs ruby -e 'ARGV.each { |i| puts "html2haml -r #{i} #{i.sub(/erb$/,"haml")}"}'
# to convert
find . -name '*html.erb' | \
xargs ruby -e 'ARGV.each { |i| puts "html2haml -r #{i} #{i.sub(/erb$/,"haml")}"}' | bash
Somewhere in this process the whitespace gets mostly stripped out. This is unfortunate, but should take less time overall to fix than converting over by hand.
Then, assuming you are using version control (not sure how much longer I will believe that this is not universal), remove the .erb files.
rm -rf "**/*.html.erb" # works in zsh at least...
This is important because Rails will look at your *.erb files first, so if you don’t delete them then the results of running html2haml won’t be seen.
Fix anything that is broken. In my case it was some illegal nesting and bad indentation problems in a couple of partials, as well as some other things that needed to be changed.
Look through the app in the browser if your tests don’t cover all of the views and for a sanity check. You may have to restart your server if you installed Haml.
Convert Haml to Slim
Ensure you have Slim installed, preferably using your Gemfile if using Bundler. Run gem install haml2slim
(we don’t need this in the Gemfile since it’s for one-time use not in the application.)
Slim template files have the ending extension .slim, like their counterparts ERB (.erb) and Haml (.haml).
Again, we use a converter.
find . -name '*html.haml' | xargs ruby -e 'ARGV.each { |i| puts "haml2slim #{i} #{i.sub(/haml$/,"slim")}"}' | bash
Again, we delete the extra files (*/.html.haml this time).
Again, we fix anything that is broken.
Now hopefully your app should be fully converted to use Slim! Suddenly a puppy appears and the sun comes out from behind the clouds.
The command to see what gems have more recent versions and can be updated is bundle outdated
. This will show you all gems that could be upgraded, but unlike bundle update
, will not actually update your gems (changing Gemfile.lock and installing new gems.)
It will output something like:
$ bundle outdated
Updating git://github.com/panozzaj/andand.git
Fetching gem metadata from http://rubygems.org/.......
Fetching gem metadata from http://rubygems.org/..
Outdated gems included in the bundle:
* ZenTest (4.6.2 > 4.5.0)
* activesupport (3.1.1 > 3.0.9)
* builder (3.0.0 > 2.1.2)
* i18n (0.6.0 > 0.5.0)
* activemodel (3.1.1 > 3.0.9)
* erubis (2.7.0 > 2.6.6)
* rack (1.3.4 > 1.2.4)
* rack-mount (0.8.3 > 0.6.14)
* rack-test (0.6.1 > 0.5.7)
* actionpack (3.1.1 > 3.0.9)
* mail (2.3.0 > 2.2.19)
* actionmailer (3.1.1 > 3.0.9)
* arel (2.2.1 > 2.0.10)
* activerecord (3.1.1 > 3.0.9)
* activeresource (3.1.1 > 3.0.9)
* devise (1.4.2 2a5ad46 > 1.4.2 e76ba05)
* railties (3.1.1 > 3.0.9)
* rails (3.1.1 > 3.0.9)
* sequel (3.28.0 > 3.20.0)
* sinatra (1.3.1 > 1.0)
To break it down, “sinatra (1.3.1 > 1.0)” means that I have version 1.0 and version 1.3.1 is available.
Potential stumbling blocks
Getting a ‘Could not find task “outdated”.’ error message when trying to run bundle outdated
?
At the time of this writing you need to have the right version of Bundler installed with gem install bundler --pre
. This installs Bundler version 1.1.rc, which should also be much faster than earlier versions of Bundler. I would expect this portion of this post to be outdated in the near future.
Last month I gave a presentation about making recommendations with Apache Mahout. Since the presentation, Manning books has released the final version of their book, Mahout in Action, which should be an even better resource than the book that I was using for my slides and presentation. Here are the slides:
(Having trouble seeing the slides? Try here.)
I was getting an error from Slim template saying:
Failure/Error: render
ActionView::Template::Error:
Unexpected end of file
my_file.html.slim, Line 15
, where the file had only 15 lines
I searched for the error and found:
# https://github.com/stonean/slim/blob/master/lib/slim/parser.rb
def parse_broken_line
broken_line = @line.strip
while broken_line[-1] == ?\\
next_line || syntax_error!('Unexpected end of file')
broken_line << "\n" << @line.strip
end
broken_line
end
What this means is that I had an extra trailing slash on one of the lines in a Slim escape that indicates that there are multiple lines. Slim was expecting another line, but didn’t see it and instead saw the end of the file. Removing the extra trailing slash fixed the problem.