69

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

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

4

8 に答える 8

127

さて、私はそれを書く正しい方法を理解しました

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

:)

于 2011-04-20T04:02:43.027 に答える
12

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

ActionMailer 物事を可能な限りドライに保ちたいので、理想的には、実際に他のホストとポートとは異なるホストとポートを使用しない限り、同じ環境の複数の場所にホストとポートをハードコーディングしたくないでしょうApplication

default_url_options全体にを設定するには、ファイルApplicationに次の行を追加するだけです(アプリの名前に変更します)。config/environment.rbMyApp

# 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"}
于 2018-01-30T20:40:03.200 に答える
6

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

于 2011-04-17T05:43:20.807 に答える
4

config.action_mailer.default_url_options = {:host=>"あなたのホスト"}

たとえば、ホストlocalhost:3000

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

于 2018-07-18T16:36:08.143 に答える
3

config / environment / development.rb (他の環境、同じ)

必要なホストでこの行を追加します

routes.default_url_options[:host] = 'localhost:3000'
于 2020-09-30T19:19:11.053 に答える
2

これが古いスレッドであることは知っていますが、Ruby2.6.3とRails5.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

その後、ローカルで開発環境を実行することができました。

于 2019-10-08T23:58:51.757 に答える
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):
于 2020-08-09T11:15:08.567 に答える
0

rakeタスクでURLを生成しようとして、自分でこの問題に遭遇しました。それは間違いなく自明ではなく、これらのソリューションの多くは機能します。私の解決策は@joshua-pinterからの離陸ですが、環境ファイルで実行されます。たとえば、私のようにdevelopment.rb見えます:

Rails.application.configure do
  …
  config.action_mailer.default_url_options = self.default_url_options = { host: 'localhost', port: 3000 }
  …
end

に適切な変更を加えましたproduction.rb

于 2021-07-11T18:31:52.390 に答える