如何在每个环境的基础上设置config.action_controller.default_url_options = {:host ='#''}

try*_*000 58 ruby-on-rails actioncontroller ruby-on-rails-3

现在我正在使用它适用于开发主机,但是当我转向生产时,我必须手动更改{:host =>""}代码.

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
Run Code Online (Sandbox Code Playgroud)

我想使用它然后定义每个环境的default_url_options:

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
Run Code Online (Sandbox Code Playgroud)

我已经尝试将此添加到我的config/environments/development.rb但我仍然得到"缺少主机链接到!请提供:host参数或设置default_url_options [:host]"错误

development.rb

config.action_controller.default_url_options = {:host => "localhost:3000"}
Run Code Online (Sandbox Code Playgroud)

我甚至用这种方式尝试过:

development.rb

config.action_controller.default_url_options = {:host => "localhost", :port => "3000"}
Run Code Online (Sandbox Code Playgroud)

编辑:

我现在也遵循了这个并且仍然是相同的错误指南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
Run Code Online (Sandbox Code Playgroud)

这让我发疯,我在这里失踪了什么?

try*_*000 113

好吧,我认为正确的写作方式是

Rails.application.routes.default_url_options[:host] = 'localhost:3000'
Run Code Online (Sandbox Code Playgroud)

:)

  • 如果你有动态主机,那么它不是线程安全的.我发现只有一种方法,就是在ApplicationController中通过before_filter设置Thread.current,并在Model中使用这个主机. (6认同)
  • 有没有办法从config.routes或类似的东西设置它? (4认同)

Rya*_*igg 6

在对此文件的更改生效之前,必须重新启动服务器.

  • 我已经完全重启我的服务器10次尝试这个:)但没有工作 (2认同)

Jos*_*ter 6

继承你的应用程序的default_url_options距离ActionMailer.

您希望尽可能保持DRY,因此,理想情况下,您不希望在同一环境的多个位置对主机和端口进行硬编码,除非您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
Run Code Online (Sandbox Code Playgroud)

这将解决您的问题,并自动设置您Applicationdefault_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"}
Run Code Online (Sandbox Code Playgroud)


Иго*_*ков 6

config/environments/development.rb (任何其他环境,相同)

添加此行与您想要的主机

routes.default_url_options[:host] = 'localhost:3000'
Run Code Online (Sandbox Code Playgroud)


小智 5

config.action_mailer.default_url_options = { :host => "你的主机" }

例如您的主机 localhost:3000

您可以将其放入 test.rb、development.rb、 Production.rb 文件中 主机可能因环境而异