Somehow, moving a perfectly happy production app to Rackspace and nginx caused URLs to no longer sport the SSL ‘s’ in “https” — bummer.
Link_to’s were fine… But a custom “tab_to” (responsible for highlighting the current tab) was not so happy (even though it used an eventual link_to).
Turns out, that it is the url_for method as I learned from here.
I also blended it with some ideas I found here.
# config/environment/production.rb # Override the default http protocol for URLs ROUTES_PROTOCOL = "https" ...
# config/environment.rb # Specifies gem version of Rails to use when vendor/rails is not present RAILS_GEM_VERSION = '2.3.5' unless defined? RAILS_GEM_VERSION # Use git tags for app version APP_VERSION = `git describe --always --abbrev=0`.chomp! unless defined? APP_VERSION # The default http protocol for URLs ROUTES_PROTOCOL = 'http' ...
# application_controller.rb # http://lucastej.blogspot.com/2008/01/ruby-on-rails-how-to-set-urlfor.html def default_url_options(options = nil) if ROUTES_PROTOCOL == 'https' { :only_path => false, :protocol => 'https' } else { :only_path => false, :protocol => 'http' } end end helper_method :url_for
Now the real kicker… Since I do not have SSL set up locally, I had to do some dev on our staging server to tweak the code and test that “https” showed up. so I turned off class caching: config.cache_classes = false
.
However, when I cap deployed with it set back to “true” https did not show up. @#$$##@!!!!%%$% AARGH.
I suspect it might have something to do with not being able to open up a cached class and redefine it? I don’t know… I am going to have to go explore this oddity next…