现在我正在使用这个适用于开发主机,但我必须手动更改{: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 / environments / development.rb但我仍然得到“缺少主机链接到!请提供:host参数或设置default_url_options [:host]”错误
config.action_controller.default_url_options = {:host => "localhost:3000"}
我甚至以这种方式尝试过:
config.action_controller.default_url_options = {:host => "localhost", :port => "3000"}
编辑:
我现在也遵循了这个错误指南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
这让我发疯,我在这里失踪了什么?
答案 0 :(得分:113)
好的,我认为正确的写作方式是
Rails.application.routes.default_url_options[:host] = 'localhost:3000'
:)
答案 1 :(得分:6)
在对此文件的更改生效之前,您必须重新启动服务器。
答案 2 :(得分:5)
default_url_options
继承您的应用程序ActionMailer
。您希望尽可能保持干净,因此,理想情况下,您不希望在同一环境的多个位置对主机和端口进行硬编码,除非您的ActionMailer
实际< / em>使用与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"}
答案 3 :(得分:1)
config.action_mailer.default_url_options = {:host =>“您的主机”}
例如您的主机localhost:3000
您可以将其放置在test.rb,development.rb,production.rb文件的主机中,这可能因环境而异
答案 4 :(得分:0)
我知道这是一个旧线程,但是我在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
然后,我能够在本地运行我的开发环境。
答案 5 :(得分:0)
对我来说有效的是
ActionMailer::Base.default_url_options = { host: "yourhosthere"} # e.g. yourhosthere=localhost:3000 or yourhosthere=example.com
因为如果您已经在配置文件中设置了端口,则仅更改[:host]会导致错误
TypeError (no implicit conversion of Symbol into Integer):
答案 6 :(得分:0)
config / environments / development.rb (任何其他环境,相同)
在此行中添加所需的主机
routes.default_url_options[:host] = 'localhost:3000'
答案 7 :(得分:0)
我自己在尝试在 rake 任务中生成 URL 时遇到了这个问题。这绝对不是显而易见的,其中许多解决方案都会起作用。我的解决方案是从@joshua-pinter's 开始,但在环境文件中完成。例如我的 development.rb
看起来像:
Rails.application.configure do
…
config.action_mailer.default_url_options = self.default_url_options = { host: 'localhost', port: 3000 }
…
end
对 production.rb
进行适当的更改。