J'ai développé une application Rails multi-tenancy en utilisant la technique de Railscast # 388 Multitenancy with Scopes.Rails Portée multi-tenancy sur Heroku
Cela fonctionne très bien sur mon iMac local utilisant POW. Mais, je n'ai pas réussi à le faire fonctionner sur Heroku. Lorsque l'application démarre, j'obtiens immédiatement un écran d'erreur.
L'erreur des journaux est:
2013-09-05T14:54:43.374240+00:00 app[web.1]: /app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.12/lib/active_record/relation/finder_methods.rb:310:in `find_with_ids': Couldn't find Tenant without an ID (ActiveRecord::RecordNotFound)
Ceci est le code application_controller.rb:
around_filter :scope_current_tenant
private
def current_tenant
Tenant.find_by_subdomain! request.subdomain
end
helper_method :current_tenant
def scope_current_tenant
Tenant.current_id = current_tenant.id
yield
ensure
Tenant.current_id = nil
end
Je le domaine urls fonctionne correctement. Mais, juste au cas où, j'ai aussi essayé de changer le code à ceci (pour le forcer à un locataire spécifique). Cela fonctionne également très bien sur mon iMac local:
def current_tenant
Tenant.find_by_subdomain! 'ame'
end
Mon problème principal est que je n'ai aucune idée de comment déboguer ceci.
Merci pour votre aide!
MISE À JOUR 1
Je reçois le texte suivant à partir du journal quand je lance locale:
10:31:05 web.1 | Processing by HomeController#index as HTML
10:31:05 web.1 | Creating scope :page. Overwriting existing method Tenant.page.
10:31:05 web.1 | Tenant Load (0.7ms) SELECT "tenants".* FROM "tenants" WHERE "tenants"."subdomain" = 'ame' LIMIT 1
10:31:05 web.1 | Completed 401 Unauthorized in 75ms
Avez-vous considéré ActsAsTenant - https://github.com/ErwinM/acts_as_tenant - il fait ce que Ryan a fait dans Railscast # 388 et plus encore. Fonctionne sur Heroku sans problème. – nmott
Je ne savais pas à ce sujet. Je vais regarder dedans. Merci! – Reddirt