So my iPhone fell and got damaged. To its credit I have to say I did hit it pretty hard several times in the past, and it’d survived. However this time it didn’t, and I had to get a replacement. I had to pay for it since it was out of warranty. However the truly painful thing was spending one week without the perks of the modern smartphone.
I had to dig out my trusty 5-year-old Nokia 7210 (not the SuperNova, I mean the original funky-buttoned 7210), a stylish and compact phone which, however, is pretty featureless by modern standards. You can talk on the phone, send SMS (barely; I don’t know how I sent messages without a full QWERTY keyboard) and that’s about it. It has no camera, no network access, the screen is only 128-color and uploading stuff requires a tedious conversion process, and it only supports 4-voice MIDI polyphonic tones.
This was due in no small part to the death of my Blackberry’s lame battery; the ‘berry would have been a decent temporary replacement for the iPhone,even though it’s not compatible with my data plan. So here’s a tip: when your phone is about to be left indefinitely in a drawer, remove the battery.
Being without the iPhone, what I missed the most was:
- The QWERTY keyboard, without a doubt, is the most-missed feature. Whether virtual or real, it’s a necessity if you plan on composing a lot of text.
- The camera, believe it or not, is really useful for a lot of purposes.
- Synchronization with my computer’s address book. A lesser phone can do it but the Nokia lacked connectivity (only infrared).
- The browser, being able to access the internet anywhere, anytime has become a true necessity.
- E-mail. Yes, also not being able to receive emails periodically or, at least, on demand, is crippling and makes me feel out of touch and claustrophobic.
- Music, I guess it’s a case of “if you have it, you will use it”. Somehow carrying the iPod around in addition to the Nokia didn’t seem like a good idea.
What I didn’t miss:
- Ringtones. However weak the Nokia’s ringtone support is, it’s very loud and adequate, and my favorite ringtone ever (acceleration.mid) was available. I like it so much, I made an MP3 of it and loaded it on the iPhone.
- GPS. It’s cool to have it but I really don’t use it all that often.
- Most of my games. I don’t play on the iPhone that often. I must point out that neither the Nokia nor the iPhone had the “snakes” game from older (and newer) Nokia phones. I guess this 7210 got stuck in the past.
Also in case you hadn’t noticed, the entire point of this rant was so that I could have a new post before the 12th and thus keeping my blog updated “more than once every 6 months”.
BerryUnitConverter has been released. Featuring conversions for pennyweight, micrometers and millimeter (can’t believe I’d forgotten that one). Get it at the usual place.
OK, so I happily hack away on my Rails application on a Debian box with Ruby 1.8.7 and Rails 2.1.0, and then deploy to a Fedora 8 server with Ruby 1.8.6 and Rails 2.2.2. All of a sudden a particular release causes Passenger to spit an error page on application startup. The key error was:
undefined method \`empty?’ for nil:NilClass
Now I’m combing all over my code to find where I’m using “empty?” but I’m sure it’s somewhere that gets run on application startup, otherwise it wouldn’t show up when Passenger tries to start the application. But I find nothing and I’m about to shoot myself.
Following the trace I end up hacking Ruby’s erb.rb file, as there appear to be some bugs in this; indeed, this one from 1.8.6 is different from what I have in 1.8.7, so the app runs fine here. I try to fix instances where empty? might get called on a nil object, but after fixing 3 of these the app stops responding altogether. Hmm, so something, somewhere, depends on erb.rb’s buggy behavior. Best to leave it alone.
HOWEVER, on the deployment server, running with script/server works fine; it’s only when using Passenger that things blow up.
Finally I find this thread that points me in the right direction:
One of the users dropped some
JPEG files into the /app/views/static directory, and that seems to be
jamming up the works with 2.2.2.
Indeed, as part of my last set of revisions, I’d left several samples of static content I was converting into dynamically generated pages; sure enough, they included JPGs and whatnot. Just to be safe, I decided to move the entire directory into public to avoid any problems.
Now the app runs just peachy and I only wasted 2 hours chasing down this bug. Thanks to the guys at Nabble!
Eventually it all boils down to this Rails bug reported at Lighthouse. So hopefully it’ll be fixed soon. In the meanwhile, keep binary files out of your views subtree.
I’m attaching the entire Passenger error page, in case it’s useful to anyone. Mainly so that Google can find it faster for other people with this problem.
Ruby on Rails application could not be started
These are the possible causes:
-
There may be a syntax error in the application’s code. Please check for such errors and fix them.
-
A required library may not installed. Please install all libraries that this application requires.
-
The application may not be properly configured. Please check whether all configuration files are written correctly, fix any incorrect configurations, and restart this application.
-
A service that the application relies on (such as the database server or the Ferret search engine server) may not have been started. Please start that service.
Further information about the error may have been written to the application’s log file. Please check it in order to analyse the problem.
-
Error message:
-
undefined method `empty?’ for nil:NilClass
-
Exception class:
-
NoMethodError
-
Application root:
-
/var/www/spcccdec/releases/20090227005857
-
Backtrace:
-
|
/usr/lib/ruby/1.8/erb.rb
|
478
|
in `scan’
|
1
|
/usr/lib/ruby/1.8/erb.rb
|
524
|
in `compile’
|
2
|
/usr/lib/ruby/1.8/erb.rb
|
691
|
in `initialize’
|
3
|
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/template_handlers/erb.rb
|
51
|
in `new’
|
4
|
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/template_handlers/erb.rb
|
51
|
in `compile’
|
5
|
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/template_handler.rb
|
11
|
in `call’
|
6
|
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/renderable.rb
|
21
|
in `_unmemoized_compiled_source’
|
7
|
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/memoizable.rb
|
57
|
in `compiled_source’
|
8
|
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/memoizable.rb
|
25
|
in `__send__’
|
9
|
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/memoizable.rb
|
25
|
in `memoize_all’
|
10
|
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/memoizable.rb
|
22
|
in `each’
|
11
|
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/memoizable.rb
|
22
|
in `memoize_all’
|
12
|
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/memoizable.rb
|
17
|
in `freeze’
|
13
|
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/paths.rb
|
88
|
in `reload!’
|
14
|
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/paths.rb
|
102
|
in `templates_in_path’
|
15
|
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/paths.rb
|
100
|
in `each’
|
16
|
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/paths.rb
|
100
|
in `templates_in_path’
|
17
|
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/paths.rb
|
86
|
in `reload!’
|
18
|
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/paths.rb
|
78
|
in `load’
|
19
|
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/paths.rb
|
109
|
in `load’
|
20
|
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/paths.rb
|
109
|
in `each’
|
21
|
/usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/paths.rb
|
109
|
in `load’
|
22
|
/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb
|
357
|
in `load_view_paths’
|
23
|
/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb
|
182
|
in `process’
|
24
|
/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb
|
112
|
in `send’
|
25
|
/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb
|
112
|
in `run’
|
26
|
./config/environment.rb
|
13
|
|
27
|
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb
|
31
|
in `gem_original_require’
|
28
|
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb
|
31
|
in `require’
|
29
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/railz/application_spawner.rb
|
254
|
in `preload_application’
|
30
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/railz/application_spawner.rb
|
214
|
in `initialize_server’
|
31
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/utils.rb
|
179
|
in `report_app_init_status’
|
32
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/railz/application_spawner.rb
|
203
|
in `initialize_server’
|
33
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/abstract_server.rb
|
166
|
in `start_synchronously’
|
34
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/abstract_server.rb
|
135
|
in `start’
|
35
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/abstract_server.rb
|
112
|
in `fork’
|
36
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/abstract_server.rb
|
112
|
in `start’
|
37
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/railz/application_spawner.rb
|
179
|
in `start’
|
38
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/spawn_manager.rb
|
222
|
in `spawn_rails_application’
|
39
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/spawn_manager.rb
|
217
|
in `synchronize’
|
40
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/spawn_manager.rb
|
217
|
in `spawn_rails_application’
|
41
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/spawn_manager.rb
|
126
|
in `spawn_application’
|
42
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/spawn_manager.rb
|
251
|
in `handle_spawn_application’
|
43
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/abstract_server.rb
|
317
|
in `__send__’
|
44
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/abstract_server.rb
|
317
|
in `main_loop’
|
45
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/lib/passenger/abstract_server.rb
|
168
|
in `start_synchronously’
|
46
|
/usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/bin/passenger-spawn-server
|
46
|
|
A new version of BerryUnitConverter is up. This one adds data units as well as Blackberry Storm compatibility. Let me know of any problems. Get it at the usual place.