2013-07-30 24 views
11

Tôi sẽ giải thích tình huống của mình.Cách yêu cầu một số tệp lib từ bất kỳ nơi nào

Đây là cây tập tin của tôi trong đường ray ứng dụng của tôi:

lib/my_module.rb

require 'my_module/my_file' 

module My_module 

end 

lib/my_module/my_file.rb

class Tweetag::Collector 
    (...) 
end 

Tôi đã thực hiện một viên hồng ngọc tập lệnh mà tôi đã đặt vào config/jobs/

Tôi thực sự không hiểu cách tôi yêu cầu tệp my_file.rb trong tệp này.

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

Nó mang lại cho tôi 'đòi hỏi': không thể tải tập tin

Cùng một lỗi chỉ với require 'my_module' đó là những gì tôi làm trong bộ điều khiển của tôi ...

Có người ở đây để giải thích cho tôi? Thanks a lot

Trả lời

11

Bạn có thể autoinclude tất cả mọi thứ dưới lib folder và tránh những vấn đề:

Loại tập tin này của bạn trong config/application.rb

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

tôi đã làm nó, nhưng vẫn: '

': uninitialized MyModule không đổi (NameError) – Zoz

+0

hiện nay bao gồm mô-đun của bạn, nơi bạn cần đến nó, với 'bao gồm My_module' –

+0

Cùng một lỗi sự bền bỉ .. .;) – Zoz

10

nếu bạn muốn chỉ cần một tập tin cụ thể sau đó,

làm điều gì đó liên quan đến gốc Rails như thế này

for ex: -- 

lib/plan.rb 

module Plan 
...some code... 
end 
.210

và nếu bạn muốn yêu cầu nó chỉ trong một số mô hình, nói app/models/user.rb

làm trong sử dụng mô hình

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

class User < ActiveRecord::Base 
    include Plan 
end 

nếu bạn muốn nó có sẵn ở khắp mọi nơi

một giải pháp được cung cấp bởi @VecchiaSpugna

và bạn cũng có thể tạo tệp ruby ​​trong thư mục config/initializers

và yêu cầu tất cả tập tin trên đó từng người một

HOẶC

try this 

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

instead of 

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

you don't need specify extension with require. 
+0

Thực sự tôi chỉ hiểu rằng tôi không thể làm một cái gì đó cụ thể cho đường ray như bạn vừa nói. Tôi juste muốn chạy dòng lệnh "ruby my_ruby_script.rb" và yêu cầu mô-đun lib của tôi trong đó. – Zoz

+0

@Zoz câu trả lời cập nhật. –

4

Tôi nghĩ có hai giải pháp.

1) Thêm đường dẫn lib vào đường dẫn tìm kiếm. Trong ruby:

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

Sau đó, bạn có thể require 'my_module.rb'

Tôi nghĩ Vecchia Spugna answer là đường ray-phiên bản của tôi ruby-câu trả lời. (Tôi không quen với đường ray).

2) Một giải pháp:

Trong bạn lib/my_module.rb bạn cần my_file. Tệp này có liên quan đến số my_module.rb của bạn? Sau đó sử dụng require_relative:

require_relative './my_module/my_file' 
+0

1) là cách để đi, vì công việc trong cấu hình/công việc dường như không được bắt đầu từ bên trong ứng dụng đường ray của mình. Vì vậy, anh ta phải tự thiết lập đường dẫn tải khi bạn mô tả nó hơn là mong đợi, rằng môi trường đường ray không được sử dụng sẽ làm điều này cho anh ta. – tvw

Các vấn đề liên quan