Ответ 1
Хорошо, я понял, как правильно это записать.
Rails.application.routes.default_url_options[:host] = 'localhost:3000'
:)
В настоящее время я использую это, которое работает для хоста разработки, но я должен вручную изменить код {: host = > ""} при переходе к производству.
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
Я бы хотел использовать это, а затем определить default_url_options для среды:
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
Я попытался добавить это в свой config/environment/development.rb, но я все равно получаю ссылку "Отсутствующий хост для ссылки". Предоставьте: параметр хоста или установите default_url_options [: host] "error
config.action_controller.default_url_options = {:host => "localhost:3000"}
И я даже пробовал это так:
config.action_controller.default_url_options = {:host => "localhost", :port => "3000"}
EDIT:
Я также следил за этим и по-прежнему одним и тем же руководством по ошибкам http://edgeguides.rubyonrails.org/action_controller_overview.html#default_url_options
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
Это сводит меня с ума, что мне здесь не хватает???
Хорошо, я понял, как правильно это записать.
Rails.application.routes.default_url_options[:host] = 'localhost:3000'
:)
Перед внесением изменений в этот файл необходимо перезагрузить сервер.
default_url_options
от ActionMailer
. Вы хотите, чтобы все было как можно более СУХИМЫМ, поэтому, в идеале, вам не нужно жестко кодировать свой хост и порт в нескольких местах для одной и той же среды, если только ваш ActionMailer
фактически не использует другой хост и порт, чем остальная часть вашего Application
.
Чтобы установить default_url_options
для всего Application
, просто добавьте следующую строку в файл config/environment.rb
(изменив MyApp
на имя вашего приложения):
# Set the default host and port to be the same as Action Mailer.
MyApp::Application.default_url_options = MyApp::Application.config.action_mailer.default_url_options
Это решит вашу проблему и автоматически установит для вашего Application
default_url_options
те же значения, что и для config.action_mailer.default_url_options
:
$ MyApp::Application.config.action_mailer.default_url_options
#=> {:host=>"lvh.me", :port=>"3000"}
$ MyApp::Application.default_url_options
#=> {:host=>"lvh.me", :port=>"3000"}
config.action_mailer.default_url_options = {: host => "ваш хост"}
например ваш хост localhost: 3000
Вы можете поместить это в файлы test.rb, development.rb, production.rb, которые могут отличаться от среды к среде
Я знаю, что это старый поток, но я столкнулся с этим с Ruby 2.6.3 и Rails 5.2.3. Поведение, которое я видел, было в основном то, что каждый добавленный мной путь потерпел бы неудачу с Error during failsafe response: undefined method 'empty?' for nil:NilClass
. На производстве это работало нормально, но в моей среде разработки я получал ошибку, упомянутую выше.
Исправление для меня было добавить это в controllers/application_controller.rb
:
def default_url_options
if Rails.env.production?
Rails.application.routes.default_url_options = { host: "www.production-domain.com", protocol: 'https' }
elsif Rails.env.development?
Rails.application.routes.default_url_options = { host: 'localhost:3000', protocol: 'http' }
end
end
Затем я смог запустить свою среду разработки на своем локальном компьютере.