ruby on rails - rails - Cómo configurar config.action_controller.default_url_options={: host=''#'' ''} según el entorno
resources as rails (4)
Heredar las ActionMailer
su aplicación de ActionMailer
.
Desea mantener las cosas lo más SECAS posible, por lo que, idealmente, no desea codificar de forma rígida su host y puerto en varios lugares para el mismo entorno, a menos que su ActionMailer
realmente utilice un host y un puerto diferente que el resto de su Application
.
Para establecer las default_url_options
para toda su Application
, simplemente agregue la siguiente línea a su archivo config/environment.rb
(cambiando MyApp
al nombre de su aplicación):
# 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
Esto solucionará su problema y establecerá automáticamente las config.action_mailer.default_url_options
su Application
al igual que su 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"}
En este momento estoy usando esto que funciona para el host de desarrollo, pero tengo que cambiar manualmente el código {: host => ""} cuando muevo a producción.
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
Me gustaría usar esto y luego definir las opciones_de_url predeterminadas por entorno:
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
He intentado agregar esto a mi config / environments / development.rb, pero sigo recibiendo el error "El host no se ha asociado al enlace! Proporcione el parámetro del host o el error set_url_options [: host]"
desarrollo.rb
config.action_controller.default_url_options = {:host => "localhost:3000"}
E incluso lo intenté de esta manera:
desarrollo.rb
config.action_controller.default_url_options = {:host => "localhost", :port => "3000"}
EDITAR:
Ahora también he seguido esto y sigo con la misma guía de error http://edgeguides.rubyonrails.org/action_controller_overview.html#default_url_options
controlador de aplicaciones
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
Esto me está volviendo loco, ¿qué me falta aquí?
De acuerdo, me di cuenta de la forma correcta de escribir es
Rails.application.routes.default_url_options[:host] = ''localhost:3000''
:)
Debe reiniciar su servidor antes de que los cambios en este archivo entren en vigencia.
config.action_mailer.default_url_options = {: host => "su host"}
por ejemplo, su host localhost: 3000
puede poner esto en el host de archivos test.rb, development.rb, production.rb podría ser diferente de un entorno a otro