Je vais expliquer ma situation.
Voici mon arborescence de fichiers dans mon application Rails:
lib/mon_module.rb
require 'my_module/my_file'
module My_module
end
lib/mon_module/mon_fichier.rb
class Tweetag::Collector
(...)
end
J'ai fait un script Ruby que j'ai mis dans config/jobs /
Je ne comprends vraiment pas comment je suis supposé exiger le fichier my_file.rb dans ce fichier.
require '../../my_module/my_file.rb'
Cela me donne `require ': impossible de charger un tel fichier
Même erreur avec juste besoin de 'mon_module', ce que je fais dans mes contrôleurs ...
Quelqu'un ici pour m'expliquer? Merci beaucoup
Vous pouvez tout inclure dans la bibliothèque folder
et éviter ces problèmes:
Tapez ceci votre fichier dans config/application.rb
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
si vous voulez n’exiger qu’un fichier spécifique,
faire quelque chose par rapport à Rails root comme celui-ci
for ex: --
lib/plan.rb
module Plan
...some code...
end
et si vous voulez l'exiger uniquement dans un modèle, dites app/models/user.rb
faire dans le modèle de l'utilisateur
require "#{Rails.root}/lib/plan"
class User < ActiveRecord::Base
include Plan
end
si vous voulez qu'il soit disponible partout
une solution est donnée par @VecchiaSpugna
et vous pouvez également créer un fichier Ruby dans le dossier config/initializers
et exiger tous les fichiers là-bas un par un
OR
try this
require '../../my_module/my_file'
instead of
require '../../my_module/my_file.rb'
you don't need specify extension with require.
Je pense qu'il y a deux solutions.
1) Ajoutez le chemin de la bibliothèque au chemin de recherche . En Ruby:
$:.unshift('../../my_module/lib')
Ensuite, vous pouvez require 'my_module.rb'
Je pense que Vecchia Spugna answer est la version Rails de ma réponse Ruby. (Je ne connais pas Rails).
2) Une autre solution:
Dans votre lib/my_module.rb
, vous avez besoin de my_file
. Ce fichier est situé par rapport à votre my_module.rb
? Ensuite, utilisez require_relative
:
require_relative './my_module/my_file'
Similaire à require_relative,
# inside lib/my_module.rb
require File.expand_path('./my_module/my_file', File.dirname(__FILE__))
Cela élargit le chemin du répertoire de fichier actuel et ajoute le chemin de fichier relatif à être requis.
Juste parce que ça m'a pris une éternité pour comprendre cela parce que très peu de solutions ont fonctionné.
• Je devais utiliser tout simplement vieux besoin. Je le mets dans le fichier config/application.rb
.
patching_file_path = File.expand_path("./lib", Dir.pwd)
Dir[patching_file_path+'/*.rb'].each {|file| require file }
• Je mets également un puts "I'm Working!
temporaire dans le fichier que je tente d'exiger afin de pouvoir vérifier si la console est en cours de chargement.
• En outre, si vous utilisez un chargeur à ressort, avant de démarrer votre console, vous devez insérer bin/spring stop
dans votre terminal avant de démarrer votre console Rails. Sinon, il ne chargera pas de nouveaux fichiers.