2010-12-25 4 views
0

Mon application renvoie une erreur sur un contrôleur ou un modèle nécessitant un fichier. typiquement j'aurais besoin d'un fichier comme montré ci-dessous.Rail 3 - Passenger path Problème

require '/lib/position_mover' 

J'ai joué avec un peu et il semble fonctionner si je spécifie un chemin à partir du répertoire haut de mon show serveur ci-dessous.

require '/srv/www/testapp/lib/position_mover' 

Je souhaite utiliser le chemin relatif pour plusieurs raisons. Quelqu'un peut-il me donner des instructions à ce sujet?

configuration du serveur:

  • Apache 2
  • Ubuntu 10.10
  • rails 3.0.3
  • rubis 1.9.2p0
  • mysql

hôte virtuel:

<VirtualHost 173.255.238.220> 
    ServerName test.targesoft.com 
    DocumentRoot /srv/www/testapp/public/ 
    <Directory /srv/www/testapp/public/> 
     PassengerAppRoot /srv/www/testapp/ 
     Allow from all 
     Options -MultiViews 
    </Directory> 
</VirtualHost> 

Répondre

1

Si vous besoin d'un fichier dans le répertoire lib d'une application Rails, ce n'est pas nécessaire. Rails nécessite tout ce qu'il y a par défaut.

+1

Malheureusement, pas plus dans Rails 3, vous avez besoin d'exiger des choses manuellement maintenant. –

+0

Ou vous pouvez les ajouter au paramètre autoload_path et lorsque leurs constantes sont référencées, elles seront automatiquement chargées –

0

Merci pour la réponse! Alors que les plugins sont la base du dossier lib, j'appelle en fait mon propre module personnalisé ici. J'ai essayé de prendre le morceau requis du haut du modèle, mais à moins que je ne l'exige en haut de mon fichier, j'obtiens une erreur pour une constante indéfinie. Il doit y avoir un moyen de configurer le passager afin qu'il regarde dans son propre répertoire par défaut.

module PositionMover 

    def move_to_position(new_position) 
    max_position = self.class.where(position_scope).count 
    # ensure new_position is an integer in 1..max_position 
     unless new_position.nil? 
     new_position = [[1, new_position.to_i].max, max_position].min 
     end 

     if position == new_position # do nothing 
     return true 
     elsif position.nil? 
     increment_items(new_position, 1000000) 
     elsif new_position.nil? 
     decrement_items(position+1, 1000000) 
     elsif new_position < position 
     increment_items(new_position, position-1) 
     elsif new_position > position 
     decrement_items(position+1, new_position) 
     end 
     return update_attribute(:position, new_position) 
    end 


    def position_scope 
    "1=1" 
    end 

    def increment_items(first, last) 
    items = self.class.where(["position >= ? and position <= ? AND #{position_scope}", first, last]) 
    items.each {|i| i.update_attribute(:position, i.position + 1)} 
    end 


    def decrement_items(first, last) 
     items = self.class.where(["position >= ? and position <= ? AND #{position_scope}", first, last]) 
     items.each {|i| i.update_attribute(:position, i.position - 1)} 
    end 


end 
1

Vous voulez placer ce module dans le répertoire lib puis l'ajouter à config.autoload_paths dans votre fichier config/application.rb (un paramètre qui, par défaut, est commenté). Lorsque vous faites référence à ce module dans votre code, Rails saura automatiquement qu'il a besoin du fichier dans le répertoire lib.

Questions connexes