2014-04-23 7 views
0

Dans le contrôleur d'application, j'ai 2 méthodes:application Rails se comporte différemment sur Heroku vs développement

def current_user 
    @current_user ||= User.find_by_auth_token(cookies[:auth_token]) if cookies[:auth_token] 
    rescue ActiveRecord::RecordNotFound 
end 
helper_method :current_user 

def pro_user 
    @pro_user = Subscription.where(:email => current_user.email).pluck(:email) if current_user 
    rescue ActiveRecord::RecordNotFound 
end 
helper_method :pro_user 

E-mail de l'utilisateur actuel est inséré dans la table d'abonnement après le paiement est terminé. Donc, je vérifie si l'utilisateur est un utilisateur payant en recherchant le current_user.email dans l'abonnement.

Sur la vue, je bloque cela en conséquence pour les utilisateurs pro et non pro.

<% if current_user %> 
     <!-- logged in -->  
     <% if pro_user.empty? %>    
       <!-- Not a premium user --> 

     <!--Display some html that iss free but not premium content --> 

     <% else %> 

      <!-- This is a premium user --> 
       <!-- Display all html accordingly --> 

     <% end %>  


    <% else %> 
       <!-- Not logged in--> 

     <!-- Display html message to log in --> 
    <% end %>  

Tout fonctionne correctement sur ma machine de développement qui a sqlite3 db. Mais en poussant à heroku, un utilisateur premium n'est jamais reconnu. Fondamentalement, je pense que si pro_user.empty? ne fonctionne pas comme prévu. Toute aide est appréciée. Pourrait-il y avoir des différences de rails dans la valeur de retour de vide? méthode entre sqlite3 et pg dbs? J'ai fait pg: reset à quelques reprises.

Répondre

0

Il y a certainement des problèmes avec l'utilisation de différents dbs dans l'environnement de développement et de production. Les requêtes et ORM peuvent fonctionner différemment entre sqlite et postgres. Par conséquent, je recommande d'utiliser postgreSQL local réel si vous utilisez cela sur heroku. L'installation est vraiment simple. Il suffit d'aller sur le lien que je fournis et installer.

Postgres.app

+0

Je suppose. Je pense que cette ligne n'est pas traduite différemment pour postgres. Subscription.where (: email => current_user.email) .pluck (: email) – user2511030

Questions connexes