web-dev-qa-db-ja.com

どこからでもいくつかのlibファイルを要求する方法

私の状況を説明します。

ここに私のRails application:

lib/my_module.rb

require 'my_module/my_file'

module My_module

end

lib/my_module/my_file.rb

class Tweetag::Collector
   (...)
end

Ruby config/jobs /に入れたスクリプトを作成しました

このファイルにmy_file.rbファイルをどのように要求するのか、本当に理解できません。

require '../../my_module/my_file.rb'

「必要」になります:そのようなファイルをロードできません

「my_module」が必要なだけで同じエラーが発生します。これは、コントローラーで行うことです...

私に説明するためにここに誰か?どうもありがとう

20
Zoz

Lib folderの下にすべてを自動挿入して、これらの問題を回避できます。

config/application.rbにファイルを入力してください

config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
20
Vecchia Spugna

特定のファイルのみを必要とする場合は、Rails root

for example: --

lib/plan.rb

module Plan
 ...some code...
end

あるモデルでのみ必要な場合は、app/models/user.rbと言います。

ユーザーモデルで行う

require "#{Rails.root}/lib/plan"

class User < ActiveRecord::Base
  include Plan
end

どこでも利用できるようにしたい場合

1つの解決策は@VecchiaSpugnaによって与えられます

または、config/initializersフォルダーにRubyファイルを作成できます

そこにあるすべてのファイルを1つずつ必要とします

OR

try this

require '../../my_module/my_file'

instead of 

require '../../my_module/my_file.rb'

Requireでファイルの拡張子を指定する必要はありません。

14
Sachin Singh

2つの解決策があると思います。

1)libパスを検索パスに追加します。 Rubyの場合:

$:.unshift('../../my_module/lib')

その後、require 'my_module.rb'

Vecchia Spugna answer は、私のRuby回答のRailsバージョンです。 (私はRailsに精通していません)。

2)別の解決策:

lib/my_module.rbには、my_fileが必要です。このファイルはmy_module.rb?に関連して配置されています次にrequire_relativeを使用します。

require_relative './my_module/my_file'
6
knut

Require_relativeと同様に、

# inside lib/my_module.rb 
require File.expand_path('./my_module/my_file', File.dirname(__FILE__))

これにより、現在のファイルディレクトリのパスが展開され、必要な相対ファイルパスが追加されます。

0
konyak

解決策がほとんどなかったので、これを理解するのに永遠に時間がかかったので、ただ声をかけてください。

•単純な古いrequireを使用する必要がありました。 _config/application.rb_ファイルに入れました。

patching_file_path = File.expand_path("./lib", Dir.pwd) Dir[patching_file_path+'/*.rb'].each {|file| require file }

•必要なファイルに一時的な_puts "I'm Working!_を入れて、コンソールが実際にロードされているかどうかを確認できるようにします。

•また、スプリングローダーを使用している場合は、コンソールを起動する前に、Railsコンソールを起動する前に端末で_bin/spring stop_を実行する必要があります。新しいファイル。

0
stephennelson