ruby on rails - হারিয়ে যাওয়া হোস্ট লিঙ্ক! অনুগ্রহপূর্বক প্রদান করুন: হোস্ট পরামিতি বা ডিফল্ট_আরএল_অপশন সেট করুন




ruby-on-rails rspec (8)

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

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

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

তবে, এটি MyApp:Application.default_url_options জন্য সেট করা MyApp:Application.default_url_options :

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

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

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

যথাযথ পরিবেশ ফাইল ( development.rb , production.rb , ইত্যাদি) এ আপনি action_mailer এর জন্য কী সংজ্ঞায়িত করেছেন তা ব্যবহারের জন্য আপনি নিজের অ্যাপ্লিকেশনটির action_mailer সেট করতে পারেন।

যত তাড়াতাড়ি সম্ভব DRY হিসাবে জিনিসগুলি রাখতে, আপনার 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

এখন যখন আপনি আপনার অ্যাপ্লিকেশনটি বুট করবেন, তখন আপনার সমগ্র অ্যাপ্লিকেশনটির action_mailer.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 জন্য @pduersteler টুপি টিপ।

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

 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)>'

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

কোন ধারনা?


আপনি URL সহায়তার জন্য একটি পরামিতি হিসাবে সর্বদা হোস্ট পাস করতে পারেন:

listing_url(listing, host: request.host)

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

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" }

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

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

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/* কারণ যখন আপনি ইঞ্জিনটি পরীক্ষা করেন তখন রেলের বিপরীতে পরীক্ষা করা হয়।

2. 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 আমি এই বিষয়ে বিন্দু দেখতে পাচ্ছি না কারণ এই ক্ষেত্রে আমি listing_path পদ্ধতি ব্যবহার করব


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

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


মজার জিনিস, যে 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।



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

Developemnt.rb / test.rb এ নিম্নলিখিত হিসাবে সংক্ষিপ্ত হতে পারে:

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

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




rspec