0

github.com/ddd1600 / simple_angelで、ファイル構造のすべてを確認できます。

「正しい方法」でルビーアプリケーション(まもなく宝石になる)を作成しようとすると、多くのエラーが発生します。ロジックをクラスと「ローダーファイル」などに完全に分割することによって。ポイントは、OOの原則に従わずに、このコードをより簡単な方法で実行する方法を知っていますが、「正しく」実行したいということです。

したがって、まず、ファイル構造は次のようになります---

root folder = ~/Develop/simple_angel

inside /simple_angel
  - /lib
  - Gemfile
  - Rakefile
  - simple_angel.gemspec

inside /lib
  - simple_angel.rb
  - /simple_angel

inside /lib/simple_angel
  - company.rb
  - search.rb
  - version.rb

しかし、ここにいくつかの基本があります。

これが私がターミナルからこのプログラムを実行するために呼んでいるものです(実行中のPATHは〜/ Develop / simple_angelです)

ruby -Ilib lib/simple_angel/search.rb

これがsearch.rbです

#these 'requires' are supposed to be loaded in lib/simple_angel.rb, so here I show
#them commented out
#
#require 'rubygems'
#require 'httparty'
#require 'json'
#require 'company'

module SimpleAngel
  class Search

  SEARCH_URL = "http://api.angel.co/1/startups"

  def search(user_input)

    response = HTTParty.get("#{SEARCH_URL}/#{user_input}")
    parsed_response = JSON.parse(response.body)

    Company.new(parsed_response)

  end
 end  

 s = SimpleAngel::Search.new
 s = Search.new
 x = s.search(6702)
 p x
 end

これが「ローダー」ファイル、lib / simple_angel.rbです(PS:この種のファイルのより正式なタイトルは何ですか?)

require 'httparty'
require 'json'
require 'simple_angel/search'
require 'simple_angel/version'
require 'simple_angel/company'

module SimpleAngel

end

最後に、(もう一度)「ruby-Ilib lib / simple_angel / search.rb」を実行すると(search.rbの「requires」がすべてコメントアウトされます(^&^)、これは私のエラーメッセージです:

[ddouglas@coders:~/Develop/simple_angel on master]
% ruby -Ilib lib/simple_angel/search.rb                                       
lib/simple_angel/search.rb:15:in `search': uninitialized constant SimpleAngel::Search::HTTParty (NameError)
from lib/simple_angel/search.rb:24:in `<module:SimpleAngel>'
from lib/simple_angel/search.rb:8:in `<main>'

^&^-ここですべての速度が上がったので、search.rbの「requires」をそのままにしておいたときに発生したエラーを含めることもできます。

% ruby -Ilib lib/simple_angel/search.rb                                       ✹
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- company (LoadError)
from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from lib/simple_angel/search.rb:6:in `<main>'
4

2 に答える 2

1

ファイルの分割に関してクラスが主張しようとしていることを理解しているとは言えません。

最初のエラー(uninitialized constant SimpleAngel::Search::HTTParty)は、内SimpleAngel::Searchからを呼び出すためですHTTParty。これをに変更して::HTTParty、ルート名前空間を指定してみてください。

于 2012-07-11T01:27:39.303 に答える
0

この問題を振り返ってみると、全体像の問題は、config / application.rbへのこの追加を介して、レール内の/libフォルダーをアクティブ化する必要があるということでした。

config.autoload_paths += Dir["#{config.root}/lib/**/"]

file_name.rb => FileNameそこから、レール内のどこからでもクラスシステムを介してコードを直接ロードできます

于 2013-04-04T03:57:58.450 に答える