মিস করা হোস্টের সাথে লিঙ্ক! দয়া করে সরবরাহ করুন: হোস্ট প্যারামিটার বা ডিফল্ট_আরল_অ্যাপশন সেট করুন [: হোস্ট]


183

আমি এখন প্রায় 90 মিনিট ধরে গুগল করছি এবং এখনও এর উত্তর নেই। আমি কোথায় সেট করব default_url_options? আমি ইতিমধ্যে config.action_mailer.default_url_optionsঅন্য কোথাও এই একই বাগটি সমাধান করার জন্য এটি সেট করে রেখেছি, তবে এখন আরএসপেক অনুচ্ছেদে কোনও ইউআরএল সাহায্যকারী ব্যবহার করার চেষ্টা করার সময় আমি এই ত্রুটিটি পাচ্ছি। এটি কোথায় ডিফল্ট_আরএল_পশন সেট হয়ে যাবে বলে আমার ধারণা নেই।

 Failure/Error: listing_url(listing).should match(/\/\d+-\w+$/)
 RuntimeError:
   Missing host to link to! Please provide :host parameter or set default_url_options[:host]
 # ./spec/routing/listing_routing_spec.rb:9:in `block (3 levels) in <top (required)>'

এই কোডটির ইমেল / অ্যাকশনমেলার সাথে কোনও সম্পর্ক নেই, কেবল একটি পাথের পরিবর্তে ইউআরএল প্রয়োজন হবে।

কোন ধারনা?


হোস্ট কি যাইহোক?
Jwan622

উত্তর:


260

প্রতিটি পরিবেশে আপনাকে নিম্নলিখিত লাইনটি যুক্ত করতে হবে:

config.action_mailer.default_url_options = { :host => "yourhost" }

এইভাবে, এটি সমস্ত পরিবেশে কাজ করতে পারে এবং পরিবেশ থেকে পরিবেশে আলাদা হতে পারে। উদাহরণ স্বরূপ:

development.rb

config.action_mailer.default_url_options = { :host => "dev.yourhost.com" }

test.rb

config.action_mailer.default_url_options = { :host => "test.yourhost.com" }

production.rb

config.action_mailer.default_url_options = { :host => "www.yourhost.com" }

16
এটি যোগ করার পরেও আপনি নিজের রেল সার্ভারটি পুনরায় চালু করার বিষয়টি নিশ্চিত করুন। কনফিগারেশনের অধীনে থাকা ফাইলগুলি স্বয়ংক্রিয়ভাবে পুনরায় লোড হয় না।
স্টেনারসন

3
আমি এটির সাথে খুব অনুরূপ কাজ করেছি এবং অ্যাকশন_মেলারের জন্য ডিফল্ট_আরল_অ্যাপশন সেট করা সাহায্য করবে না। ব্যবহারের কেসটি এর সাথে সমান: রেলস.অ্যাপ্লিকেশন.আরলেটস_আল_হেল্পার্স.ম্যাসেজ_আইমেজ_আরল (২)
বোটি

1
এটা করেছে; www সহ বা ছাড়াই ... উত্পাদনে হোস্টের নাম উপস্থাপন করা, আমি এখনও একই ত্রুটি পেয়েছি। @ D11wtq প্রতি রুট যুক্ত হয়েছে এবং এটি কার্যকর হয়েছে। এমন কিছু রেলস 4 রয়েছে যা এই আচরণের কারণ হয়েছে? আপগ্রেড করার আগে আমি এটি কখনও দেখিনি, এবং কেবলমাত্র একটি নির্দিষ্ট মেল-প্রেরণে (ডিজাইস-অটোমেটেড)।
জোসেফকে

এটি নিশ্চিত করতে পারে যে এটি আমার রেল 4 প্রকল্পে কাজ করে না। রুটগুলিতে সেট করা কোনও বিকল্প নয়।
b1nary

4
৫ টি default_url_options Rails.application.config.action_mailer.default_url_options
কারাগারে

74
Your::Application.routes.draw do
  default_url_options :host => "example.com"

  # ... snip ...
end

কোথাও routes.rb:)


35
ভিন্ন ইউআরএল সহ আপনি যদি অনেকগুলি ভিন্ন পরিবেশ পেয়ে থাকেন তবে খুব ভাল নয়
নীল মিডলটন

2
হ্যাঁ আপনি একাধিক এনভির ডোমেন রাখলে আপনি কী করবেন?
ওয়েজরোস্কি

সম্ভবত আপনি শুধু রুট ম্যাপ পরিবর্তে প্রতিটি URL এর জন্য এটা উল্লেখ, হয়, বা URL সাহায্যকারী আবাহন মধ্যে: listing_url(listing, :host => "whatever.com")
d11wtq

14
প্রতিটি সম্পর্কিত পরিবেশের জন্য কনফিগার ফাইলে, আমি এই কাস্টম বিকল্পটি যুক্ত করি: config.domain = 'staging.myapp.com'(অবশ্যই প্রতিটি এনভির জন্য একটি সঠিক ডোমেন নামের বিকল্প)। তারপরে routes.rbআমি ব্যবহার করতে মুক্ত default_url_options host: Rails.application.config.domainএবং এটি যে কোনও পরিবেশে কাজ করবে। আপনাকে স্বাগতম.
প্রথম থানানার্ট

10
একটি ভাল পদ্ধতির হবে, রুট ফাইল মধ্যে এই কাজ: default_url_options Rails.application.config.action_mailer.default_url_options
সায়ান্নোপল্লো

42

হোস্টটি প্রতিটি পরিবেশের কনফিগারেশন ফাইলে নির্দিষ্ট করা উচিত। উদাহরণ:

config/environments/development.rb

দেখুন এই প্রশ্নের এবং এই প্রশ্নের


4
ধন্যবাদ, এই প্রোগ্রামটিতে এই উত্তর চেয়ে ভাল উত্তর যে ব্যবহারসমূহ routes.draw হয়
joelparkerhenderson

1
বিভিন্ন ডোমেন ব্যবহার করার সময় এবং অন্যান্য সমস্যার সমাধান করার সময় এই উত্তরটি সাহায্য করে না।
রায়ান

1
@ রায়ান আপনি ঠিক করতে পরিবেশ পরিবেশগুলি ব্যবহার করতে পারেন
আদালতরা

35

default_url_optionsআপনার ব্যবহার করতে সেট করুন action_mailer.default_url_options

আপনার পরিবেশ ফাইল (যেমন প্রতিটি development.rb, production.rbইত্যাদি) আপনি নির্দিষ্ট করতে পারেন default_url_optionsজন্য ব্যবহার করতে action_mailer:

config.action_mailer.default_url_options = { host: 'lvh.me', port: '3000' }

তবে এগুলির জন্য সেট করা হয়নি MyApp:Application.default_url_options:

$ MyApp::Application.config.action_mailer.default_url_options
#=> {:host=>"lvh.me", :port=>"3000"}

$ MyApp::Application.default_url_options
#=> {}

এজন্য আপনি বাইরের যে কোনও ক্ষেত্রে সেই ত্রুটিটি পাচ্ছেন ActionMailer

তুমি তোমার অ্যাপ্লিকেশনের সেট করতে পারেন default_url_optionsব্যবহার করতে কি আপনার জন্য সংজ্ঞায়িত action_mailerউপযুক্ত পরিবেশ ফাইল (মধ্যে development.rb, production.rb, ইত্যাদি)।

জিনিসগুলি যতটা সম্ভব ডিআরওয়াই রাখার জন্য, আপনার config/environment.rbফাইলে এটি করুন যাতে আপনার কেবল এটি একবার করতে হবে:

# Initialize the rails application
MyApp::Application.initialize!

# 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

এখন আপনি যখন নিজের অ্যাপটি বুট করবেন তখন আপনার সম্পূর্ণ অ্যাপ্লিকেশনটি default_url_optionsআপনার সাথে মেলে 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"}

আমাকে এই পথে চালিত করার জন্য @pduersteler এ টুপি টিপুন


2
config/environment.rbআপনি বর্ণিত হিসাবে সেট আপ করা আমার মেলারের কনসোলে কাজ করার জন্য কী ছিল key ধন্যবাদ!
এরিক ডি ফিল্ডস 21

@ এরিকডি.ফিল্ডস আপনি খুব স্বাগতম, এরিক! আমি এটিকে এত দরকারী বলে মনে করি এটি আমার কাছে রেলের মূল অংশে তৈরি করা উচিত।
জোশুয়া পিন্টার

এটি Rails.application.default_url_options = Rails.application.config.action_mailer.default_url_options5-10+ রেলের জন্য হবে
সান্দ্রো এল

ধন্যবাদ, @ স্যান্ড্রোএল! আমরা এখনও ৪.২ টি কারাগারে রয়েছি সুতরাং পরবর্তী সংস্করণগুলিতে এখনও পরীক্ষা করা হয়নি।
জোশুয়া পিন্টার 6'19

কয়েক জন এটি সুপারিশ করছেন। আমি এটা ঠিক যে মানুষ action_mailer.default_url_options ইতিমধ্যে ঐতিহাসিক কারণে কনফিগার করা থাকে, কিন্তু এটা সেট আরো যৌক্তিক যে application.default_url_options বদলে অন্য উপায় কাছাকাছি উপর ভিত্তি করে? আপনার ওয়েবসাইটের লিঙ্কগুলি কীভাবে কাজ করে তা কনফিগার করার সময় বোগাস মেলারের রেফারেন্স কেন জড়িত থাকে?
হ্যারি উড

24

আপনি যখন কোনও listing_urlপদ্ধতি ব্যবহার করেন তখন সম্পূর্ণ ইউআরএল ফিরে আসবে (স্বাভাবিক হিসাবে কোনও আপেক্ষিক নয়)। রেলগুলি আপনাকে সম্পূর্ণ ইউআরএল গণনা করার জন্য হোস্টের কাছে অনুরোধ করছে why

কীভাবে আপনি রেলটিকে হোস্ট বলতে পারেন? আপনি এটি বিভিন্ন উপায়ে করতে পারেন:

1. প্রতিটি পরিবেশে এই বিকল্পটি যুক্ত করুন:

[/config/development.rb]
config.action_mailer.default_url_options = { host: "localhost:3000" }
[/config/test.rb]
config.action_mailer.default_url_options = { host: "localhost:3000" }
[/config/production.rb]
config.action_mailer.default_url_options = { host: "www.example.com" }

দ্রষ্টব্য: আপনি যদি রেল ইঞ্জিনের অভ্যন্তরে কাজ করছেন তবে ইঞ্জিন পরীক্ষার অভ্যন্তরে আপনার ডামি অ্যাপ্লিকেশনটির জন্যও একই কাজটি মনে রাখতে হবে: path_to_your_engine/test/dummy/config/environments/*কারণ আপনি যখন ইঞ্জিনটি পরীক্ষা করেন তখন রেলের বিরুদ্ধে পরীক্ষা করা হয়।

২.এভাবে foo_url পদ্ধতিতে হোস্ট বিকল্পটি যুক্ত করুন:

listing_url(listing, host: request.host) # => 'http://localhost:3000/listings/1'

3. অপশনটি দিয়ে হোস্ট আউটপুট করবেন না:only_path to true

listing_url(listing, only_path: true ) # => '/listings/1'   

আইএমএইচএও আমি এটির দিকটি দেখতে পাচ্ছি না কারণ এই ক্ষেত্রে আমি listing_pathপদ্ধতিটি ব্যবহার করব


পদক্ষেপ 1 সর্বদা আমার এবং আজকের জন্য কাজ করে, শোধনাগার-সেন্টিমিটার রত্ন ব্যবহার করে আমাকে 2 বাঁচান step মন্তব্যের জন্য ধন্যবাদ.
lucianosousa

15

মজার বিষয়, সেটিংটি config.action_mailer.default_url_optionsআমার পক্ষে সহায়ক হয় না। এছাড়াও, জায়গাগুলিতে পরিবেশ-স্বতন্ত্র সেটিংসের সাথে গোলমাল করা আমার মনে হয়েছিল এটির অন্তর্ভুক্ত নয় আমার পক্ষে সন্তুষ্টিজনক নয়। তদ্ব্যতীত, আমি সাইডিকিউক / রেসকিউ কর্মীদের মধ্যে ইউআরএল তৈরি করার সময় একটি সমাধান চাইছিলাম।

আমার এ পর্যন্ত যোগাযোগ, যা এর মধ্যে যায় config/environments/{development, production}.rb:

MyApp::Application.configure do
    # Stuff omitted...

    config.action_mailer.default_url_options = {
      # Set things here as usual
    }
end

MyApp::Application.default_url_options = MyApp::Application.config.action_mailer.default_url_options

এটি আমার জন্য রেল> = 3.2.x এ কাজ করে।


1
এটি এবং কেবল এটিই ইউআরএল অন্তর্ভুক্ত করার জন্য মেলারকে পাওয়ার জন্য কাজ করেছিল, তবে এটি আমার অ্যাপ্লিকেশনটিতে অন্যান্য লিঙ্ক_ টু ফাংশনগুলি ভেঙে দেয়।

1
দুর্দান্ত চিন্তা, @pduesteler! আমি আসলে এটি আরও এক ধাপ এগিয়ে নিয়েছি এবং এটি করতে config/environment.rbফাইলটিতে কেবল একটি লাইন যুক্ত করতে সক্ষম হয়েছি । এবং যুক্ত উত্তরটি বিশদে যায়: stackoverflow.com/a/48529627/293280 আমাকে এই দিকে নির্দেশ করার জন্য ধন্যবাদ।
জোশুয়া পিন্টার

9

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

ডেভেলপমেন্ট.আরবি / টেস্ট.আরবিতে নিম্নলিখিত হিসাবে আরও সংক্ষিপ্ত হতে পারে:

Rails.application.configure do
  # ... other config ...

  routes.default_url_options[:host] = 'localhost:3000'
end

7

আপনি সর্বদা ইউআরএল সাহায্যকারীকে প্যারামিটার হিসাবে হোস্টটি পাস করতে পারেন:

listing_url(listing, host: request.host)

দ্রষ্টব্য: আপনি একটি listing_url(listing, host: request.host, port: 3000)
বন্দরটিও

তবে আপনার যদি অনুরোধের প্রসঙ্গ না থাকে? কন্ট্রোলার ছাড়াও বেশিরভাগ জিনিসের মতো?
কোর্টিসমাস

3

আপনি অ্যাপ্লিকেশন কন্ট্রোলারে ডিফল্ট url বিকল্পগুলি সেট করতে পারেন:

class ApplicationController < ActionController::Base
  def default_url_options
    {:locale => I18n.locale}
  end
end

http://guides.rubyonrails.org/action_controller_overview.html#default_url_options


এটি রেলস 4 এর জন্য একটি ভাল সমাধান, কারণ এটি আপনাকে যদি প্রয়োজন হয় তবে নিয়ামকের জন্য নির্দিষ্ট বিকল্পগুলি সেট করতে দেয়।
ইব্রাহিম

1

আমি এই একই ত্রুটি ছিল। আমি টিউটোরিয়াল থেকে 10.13 তালিকা সহ সমস্ত কিছু সঠিকভাবে লিখেছিলাম had

Rails.application.configure do
.
.
.
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delevery_method :test
host = 'example.com'
config.action_mailer.default_url_options = { host: host }
.
.
.
end

স্পষ্টতই আমার সার্ভার ইউআরএল দ্বারা "উদাহরণ.com" প্রতিস্থাপন করা হয়েছে।

টিউটোরিয়ালে আমি যা দেখেছি তা এই লাইনটি ছিল:

কনফিগারেশনটি সক্রিয় করতে বিকাশ সার্ভার পুনরায় চালু করার পরে ...

সুতরাং আমার জন্য উত্তরটি ছিল সার্ভারটি বন্ধ করে আবার চালু করা।


1

কনফিগারেশন / পরিবেশ / test.rb এ যান

Rails.application.routes.default_url_options [: হোস্ট] = 'লোকালহোস্ট: 3000'


2
উত্তরের আরও তথ্য দরকার। আপনি আসলে সমাধান হিসাবে প্রস্তাব করছেন এটি কি তা দয়া করে বর্ণনা করুন।
লেভি রবার্টস

1
কীভাবে উত্তর দেবেন সে সম্পর্কে এখানে কয়েকটি দরকারী টিপস রয়েছে । আমি তাদের উল্লেখ করতে দরকারী মনে করি।
গ্যারেট মোটজনার

1

সেক্ষেত্রে কেউ যদি অ্যাক্টিভস্টোরেজ সম্পর্কিত ত্রুটিগুলির সন্ধান করে তবে:

যদি আপনার একটি কন্ট্রোলার-অ্যাকশন থাকে যেখানে আপনি স্থানীয় ডিস্ক-পরিষেবা (সম্ভবত পরীক্ষার পরিবেশে) এর সাথে আপলোড-url ইত্যাদি তৈরি করতে চান include ActiveStorage::SetCurrentতবে blob.service_url_for_direct_uploadসঠিকভাবে কাজ করার অনুমতি দেওয়ার জন্য আপনাকে নিয়ামকের মধ্যে থাকা দরকার ।


ধন্যবাদ! এটি একটি নিয়ামকের বাইরে (গ্রাফকিউএল ডাইরেক্ট আপলোড মিউটেশন) ব্যবহার করে তাই এটি কিছুটা সামান্য তিরস্কার করতে হয়েছিল, কিন্তু কাজ করে। আমি এটি সন্ধান করছি, আবার @ ফোয়েট ধন্যবাদ :)
স্টান

0

রুটগুলিতে ডিফল্ট_আরএল যুক্ত করা সঠিক সমাধান না হলেও এটি কিছু ক্ষেত্রে কাজ করে।

আপনি প্রতিটি পরিবেশে ডিফল্ট_আরএল সেট করতে হবে (বিকাশ, পরীক্ষা, উত্পাদন)।

আপনার এই পরিবর্তনগুলি করা দরকার।

    config/environments/development.rb
     config.action_mailer.default_url_options = 
      { :host => 'your-host-name' }  #if it is local then 'localhost:3000'

 config/environments/test.rb
      config.action_mailer.default_url_options = 
      { :host => 'your-host-name' }  #if it is local then 'localhost:3000'

  config/environments/development.rb
     config.action_mailer.default_url_options = 
      { :host => 'your-host-name' }  #if it is local then 'localhost:3000'

0

আমি পরিবেশ.rb হিসাবে কনফিগার করে সমস্যাটি সমাধান করেছি

আপনার অ্যাপ্লিকেশন :: অ্যাপ্লিকেশন.ডেফল্ট_আরল_পশনস = আপনার অ্যাপ :: অ্যাপ্লিকেশন: কনফিগ.অ্যাকশন_মাইলআরডিফল্ট_আরল_অপশন

আপনার প্রতিটি পরিবেশের মতো উন্নয়ন, পরীক্ষা, স্টেজিং এবং উত্পাদন ইত্যাদির বিরুদ্ধে অ্যাকশন মেইলারের জন্য আপনাকে ডিফল্ট_আরল_অ্যাপশন সেট করতে হবে

রেফারেন্স: লিঙ্কে হোস্ট মিস! দয়া করে সরবরাহ করুন: হোস্ট প্যারামিটার বা ডিফল্ট_আরল_অ্যাপশন সেট করুন [: হোস্ট]


0

উপরের উত্তরটি আমার পক্ষে কার্যকর হয়নি, আমি যেমন চেয়েছিলাম তেমন নয় not config.action_mailer.default_url_options = { host: "localhost", port: 3000 } শয়তান ইনস্টল করার পরে আমি বুঝতে পেরেছি । আশা করি এটি একই সমস্যাযুক্ত কাউকে সহায়তা করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.