2017-07-17 1 views
0

Chaque fois qu'un contrôleur ou modèle tente d'accéder à une classe sur le dossier/lib, il dit:Rails de ne pas trouver les fichiers sur le dossier lib

NameError (non initialisée constante « current_controller »: « nom_classe » avez-vous dire ' something_else ')

OUI, je sais que les rails et les conventions de nommage je l'utilise correctement. J'ai le code fonctionnant dans plusieurs autres serveurs (Ubuntu & CentOS 6). Il ne commet des erreurs que sur ces 2 serveurs RedHat7.2 que nous avons - mêmes ruby ​​/ rails/gems sur tous les serveurs. L'erreur se produit avec n'importe quel fichier de bibliothèque que j'essaie d'utiliser. SELinux est désactivé.

Ruby version 2.3.3; Rails version 5.1.0 (même sur tous les serveurs)

Vous avez des idées? Rails est supposé charger automatiquement ces fichiers de classe.

+0

Les rails ne chargent pas automatiquement les fichiers dans lib/sans que vous le disiez. –

+0

Copie possible de [Chargement automatique des fichiers lib dans Rails 4] (https://stackoverflow.com/questions/19098663/auto-loading-lib-files-in-rails-4) –

Répondre

3

Sur rails < 5:

config/application.rb

module your_app 
    class Application < Rails::Application 
    # Settings in config/environments/* take precedence over those specified here. 
    # Application configuration should go into files in config/initializers 
    # -- all .rb files in that directory are automatically loaded. 
    config.autoload_paths += %W(#{config.root}/lib/path) 
    end 
end 

sur rails> = 5

module your_app 
    class Application < Rails::Application 
    config.eager_load_paths << "#{Rails.root}/lib/path" 
    end 
end 

Si vous voulez rails à charger votre auto lib vous devez placer dans le dossier app.

+0

N'auras-tu pas encore besoin d'ajouter 'lib' aux' autoload_paths' dans les rails 5? Je crois que 'eager_load_paths' ne prendra effet que lorsque' eager_load' aura la valeur true, ce qui ne sera pas vrai en développement. Dans les rails 5, les rails ne se replieront pas en autoloading en production si 'eager_load' est vrai, donc vous devez ajouter le répertoire à eager_load_paths. – Puhlze

+0

@Puhlze au moins avec 5.1.2 Je l'ai seulement avec 'eager_load_paths', double check' config.eager_load' et est mis à false sur 'development.rb'. Les classes ne seront pas chargées, mais les chemins disponibles? Vous ne savez pas ce que la magie noire est en jeu là-bas et ne le regardera pas maintenant: p –

+0

Mon application.rb a dû être mis à jour à la norme 5 rails. Je ne comprends pas pourquoi dans certains serveurs, il fonctionnait toujours avec les rails 4 standard. Maintenant tout le monde a les rails 5 standard et tout le monde est content :) – pirhac