web-dev-qa-db-ja.com

環境ごとにconfig.action_controller.default_url_options = {:Host = '#' '}を設定する方法

現在、これは開発ホストで機能するものを使用していますが、実稼働環境に移行するときに{: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

これを使用して、環境ごとに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

これをconfig/environments/development.rbに追加しようとしましたが、「リンクするホストがありません!:Hostパラメーターを指定するか、default_url_options [:Host]を設定してください」というエラーが表示されます。

development.rb

config.action_controller.default_url_options = {:Host => "localhost:3000"}

そして、私はそれをこのように試しました:

development.rb

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

これは私を夢中にさせています、ここで何が欠けていますか?

58
trying_hal9000

さて、私はそれを書く正しい方法を見つけました

Rails.application.routes.default_url_options[:Host] = 'localhost:3000'

:)

113
trying_hal9000

このファイルへの変更を有効にするには、サーバーを再起動する必要があります。

6
Ryan Bigg

ActionMailerからアプリケーションのdefault_url_optionsを継承します。

可能な限りDRYとして保持するため、理想的には、ActionMailer実際は、Applicationの他の部分とは異なるホストとポートを使用します。

Application全体にdefault_url_optionsを設定するには、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

これにより問題が修正され、Applicationdefault_url_optionsconfig.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"}
6
Joshua Pinter

config.action_mailer.default_url_options = {:Host => "your Host"}

たとえば、ホストlocalhost:3000

これをtest.rb、development.rb、production.rbファイルに配置できます。ホストは環境ごとに異なる可能性があります。

1