Programing

루비 '필수'오류 : 해당 파일을로드 할 수 없습니다

crosscheck 2020. 5. 29. 07:58
반응형

루비 '필수'오류 : 해당 파일을로드 할 수 없습니다


다음 내용을 가진 main.rb 파일 하나가 있습니다.

require "tokenizer.rb"

tokenizer.rb 파일은 동일한 디렉토리에 있으며 그 내용은 다음과 같습니다.

class Tokenizer
    def self.tokenize(string)
        return string.split(" ")
    end
end

main.rb를 실행하려고하면 다음 오류가 발생합니다.

C:\Documents and Settings\my\src\folder>ruby main.rb

C:/Ruby193/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- tokenizer.rb (LoadError)
        from C:/Ruby193/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require '
        from main.rb:1:in `<main>'

방금 모든 것을 load대신 사용하면 require정상적으로 작동 한다는 것을 알았습니다 . 여기에 무슨 문제가 있습니까?


방금 시도했지만 작동합니다 require "./tokenizer". 도움이 되었기를 바랍니다.


그냥 이렇게 :

require_relative 'tokenizer'

이 파일을와 같은 디렉토리에있는 Ruby 파일에 넣으면 tokenizer.rb현재 작업 디렉토리 (CWD)가 무엇이든 상관없이 제대로 작동합니다.

이것이 최선의 방법 인 이유에 대한 설명

다른 답변은 사용해야한다고 주장 require './tokenizer'하지만 잘못된 답변입니다. 루비 프로세스를 동일한 디렉토리에서 실행하는 경우에만 작동하기 때문에 그렇게 해야하는 tokenizer.rb이유는 거의 require필요합니다. 가없는 Ruby 1.8을 지원합니다 require_relative.

require './tokenizer'대답은 오늘 당신을 위해 작동 할 수 있지만, 불필요하게 당신이 당신의 루비 코드를 실행할 수있는 방법을 제한합니다. 내일, 파일을 다른 디렉토리로 옮기거나 다른 디렉토리에서 Ruby 프로세스를 시작하려면 해당 require문장을 모두 다시 생각해야 합니다.

사용 require하중 경로에있는 파일에 액세스하는 것은 좋은 일이고 루비 보석 모든 시간을. 하지만 당신은에 인수를 시작해서는 안 requireA를 .아주 특별한 경우가 아니면 일을 뭔가 당신이 무엇을하고 있는지 알고있다.

환경에 대해 가정하는 코드를 작성할 때는 어떤 가정을 고려해야하는지 신중하게 고려해야합니다. 이 경우 tokenizer파일 을 요구하는 최대 3 가지 방법이 있으며 각각 다른 가정을합니다.

  1. require_relative 'path/to/tokenizer': 두 Ruby 소스 파일 간의 상대 경로가 동일하게 유지된다고 가정합니다.
  2. require 'path/to/tokenizer': path/to/tokenizer로드 경로 ( $LOAD_PATH) 의 디렉토리 중 하나에 있다고 가정합니다 . 로드 경로에 무언가를 추가해야하기 때문에 일반적으로 추가 설정이 필요합니다.
  3. require './path/to/tokenizer': Ruby 프로세스의 현재 작업 디렉토리에서 상대 경로로의 가정 tokenizer.rb 가 동일하게 유지 .

대부분의 사람들과 대부분의 상황에서 옵션 # 1과 # 2의 가정은 시간이 지남에 따라 실현 될 가능성이 높다고 생각합니다.


Ruby 1.9는로드 경로에서 현재 디렉토리를 제거 했으므로 David Grayson이 말한 것처럼이 파일에 대해 상대적 요구를 수행해야합니다.

require_relative 'tokenizer'

.rb루비의 똑똑한 점은 그것이 무엇을 의미하는지 알 수있을 정도로 똑똑하기 때문에 접미사를 붙일 필요는 없습니다 .


require에서 파일을로드합니다 $LOAD_PATH. 에서 대신 현재 실행중인 파일을 기준으로 파일을 요구하려면을 $LOAD_PATH사용하십시오 require_relative.


나는 추천 할 것이다

load './tokenizer.rb'

파일이 동일한 작업 디렉토리에 있음을 알고 있습니다.

파일을 기준으로 요구하려는 경우 사용할 수 있습니다.

require_relative 'tokenizer'

이게 도움이 되길 바란다.


또 다른 멋진 작은 방법은 현재 디렉토리를로드 경로에 포함시키는 것입니다.

$:.unshift('.')

$ : ($ LOAD_PATH) 배열로 푸시 할 수는 있지만 unshift는 나머지로드 경로 전에 현재 작업 디렉토리를 강제로로드합니다.

로드 경로에 현재 디렉토리를 추가 한 후에는 계속 지정할 필요가 없습니다.

 require './tokenizer' 

다시 사용으로 돌아갈 수 있습니다.

require 'tokenizer'

gem lib 디렉토리에 있고 tokenizer.rb 인 경우에 잘 작동합니다.

require_relative 'tokenizer/main'

jruby-1.7.4를 사용하여 루비 코드를 컴파일했습니다.

require 'roman-numerals.rb' 

아래 오류가 발생한 코드입니다.

LoadError: no such file to load -- roman-numerals
  require at org/jruby/RubyKernel.java:1054
  require at /Users/amanoharan/.rvm/rubies/jruby-1.7.4/lib/ruby/shared/rubygems/custom_require.rb:36
   (root) at /Users/amanoharan/Documents/Aptana Studio 3 Workspace/RubyApplication/RubyApplication1/Ruby2.rb:2

요구에서 rb를 제거하고 주었다

require 'roman-numerals' 

잘 작동했습니다.


검색 경로에 현재 디렉토리를 포함시키는 것은 어떻습니까?

ruby -I. main.rb

문제는 require현재 디렉토리에서로드되지 않는다는 것입니다. 이것은 내가 생각한 것이기도하지만이 스레드를 찾았습니다 . 예를 들어 다음 코드를 시도했습니다.

irb> f = File.new('blabla.rb')
=> #<File:blabla.rb>
irb> f.read
=> "class Tokenizer\n    def self.tokenize(string)\n        return string.split(
\" \")\n    end\nend\n"
irb> require f
LoadError: cannot load such file -- blabla.rb
        from D:/dev/Ruby193/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `req
uire'
        from D:/dev/Ruby193/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `req
uire'
        from (irb):24
        from D:/dev/Ruby193/bin/irb:12:in `<main>'

As it can be seen it read the file ok, but I could not require it (the path was not recognized). and here goes code that works:

irb f = File.new('D://blabla.rb')
=> #<File:D://blabla.rb>
irb f.read
=> "class Tokenizer\n    def self.tokenize(string)\n        return string.split(
\" \")\n    end\nend\n"
irb> require f
=> true

As you can see if you specify the full path the file loads correctly.


First :

$ sudo gem install colored2

And,you should input your password

Then :

$ sudo gem update --system  

Appear Updating rubygems-update ERROR: While executing gem ... (OpenSSL::SSL::SSLError) hostname "gems.ruby-china.org" does not match the server certificate

Then:

$  rvm -v
$ rvm get head

Last What language do you want to use?? [ Swift / ObjC ]

ObjC

Would you like to include a demo application with your library? [ Yes / No ]

Yes

Which testing frameworks will you use? [ Specta / Kiwi / None ]

None

Would you like to do view based testing? [ Yes / No ]

No

What is your class prefix?

XMG

Running pod install on your new library.


For those who are absolutely sure their relative path is correct, my problem was that my files did not have the .rb extension! (Even though I used RubyMine to create the files and selected that they were Ruby files on creation.)

Double check the file extensions on your file!


you need to give the path. Atleast you should give the path from the current directory. It will work for sure. ./filename

참고URL : https://stackoverflow.com/questions/9750610/ruby-require-error-cannot-load-such-file

반응형