Right now I'm using this which works for the development host, but I have to manually change the {:host => ""} code when I move to production.
post.rb
def share_all
url = Rails.application.routes.url_helpers.post_url(self, :host => 'localhost:3000')
if user.authentications.where(:provider => 'twitter').any?
user.twitter_share(url)
end
end
I'd like to use this and then define the default_url_options per environment:
post.rb
def share_all
url = Rails.application.routes.url_helpers.post_url(self)
if user.authentications.where(:provider => 'twitter').any?
user.twitter_share(url)
end
end
I've tried adding this to my config/environments/development.rb but I still get the "Missing host to link to! Please provide :host parameter or set default_url_options[:host]" error
development.rb
config.action_controller.default_url_options = {:host => "localhost:3000"}
And I even tried it this way:
development.rb
config.action_controller.default_url_options = {:host => "localhost", :port => "3000"}
EDIT:
I've now also followed this and still the same error guide http://edgeguides.rubyonrails.org/action_controller_overview.html#default_url_options
application controller
class ApplicationController < ActionController::Base
protect_from_forgery
include ApplicationHelper
def default_url_options
if Rails.env.production?
{ :host => "example.com"}
else
{:host => "example1.com"}
end
end
end
This is driving me crazy, what am I missing here???
You have to restart your server before the changes to this file takes effect.
Okay I figured it out the correct way to write it is
:)
I know this is an old thread, but I ran into this with Ruby 2.6.3 and Rails 5.2.3. The behavior I was seeing was basically that every path I added would fail with
Error during failsafe response: undefined method 'empty?' for nil:NilClass
. In production it worked fine, but in my development environment, I would get the error mentioned above.The fix for me was add this to
controllers/application_controller.rb
:I was then able to run my development environment on my local.
Inherit your Application's
default_url_options
fromActionMailer
.You want to keep things as DRY as possible so, ideally, you don't want to hard code your host and port in multiple places for the same environment, unless your
ActionMailer
actually uses a different host and port than the rest of yourApplication
.To set the
default_url_options
for your entireApplication
, simply add the following line to yourconfig/environment.rb
file (changingMyApp
to your app's name):This will fix your problem and automatically set your
Application
'sdefault_url_options
to the same as yourconfig.action_mailer.default_url_options
:config.action_mailer.default_url_options = { :host => "your host" }
for instance your host localhost:3000
you can put this in test.rb, development.rb, production.rb files host could be different from environment to environment