Railsでの設定の仕組みを教えてください 質問する

Railsでの設定の仕組みを教えてください 質問する

Rails 3アプリケーション「MyApp」があります。config\environments\production.rbファイルには次のような記述があります。

MyApp::Application.configure do
  config.log_level = :info
  config.logger = Logger.new(config.paths.log.first, 'daily')
   ...or...
  config.logger = Logger.new(Rails.root.join("log",Rails.env + ".log"),3,20*1024*1024)

したがって、質問は用語とその意味に焦点が当てられています... (または、これがどのように機能するかを説明する、私が探したが見つからなかったサイトを教えてください。)

  1. MyAppはモジュールですか?
  2. MyApp::Application は...? え、モジュールでもあるの?
  3. MyApp::Application.configure はメソッドですか?
  4. config は変数ですか? コンソールで確認するにはどうすればいいですか?
  5. config.logger は???
  6. config.paths.log.first は ...?? -- コンソールに「MyApp::Application.configure.config.paths.log.first」と表示されますが、それが何を意味するのか、またはそこから情報を抽出する方法がわかりません。

一つの質問としては多すぎますか? :)

チュートリアルを見ましたhttp://guides.rubyonrails.org/configuring.htmlしかし、それは物事が何をするかにすぐに飛びつきます。

ベストアンサー1

6面の質問です!おやおや。えーんロール。1では、6 倍の賛成票をもらえることを期待しています。:)

1. MyApp はモジュールですか?

はい、それはモジュールです。アプリケーションに関係するすべてのものの「コンテナ」として機能します。たとえば、次のようなクラスを定義できます。

module MyApp
  class MyFunClass
    def my_fun_method
    end
  end
end

そうすれば、他の誰かが を持っていてもMyFunClass、それがあなたの に干渉することはありませんMyFunClass。これは、コードを分離するための優れた方法です。

2. MyApp::Application は...? え、モジュールでもあるの?

MyApp::Applicationは実際には を継承するクラスです。これは、実際には のインスタンスである オブジェクトRails::Applicationの設定など、さまざまなことを行います。このオブジェクトでは、アプリケーションへのリクエスト (またはセッション内) など、さまざまな楽しい操作を実行できます。たとえば、このコードはアプリケーションのルート パスにダミー リクエストを実行し、単純な Rack レスポンスである 3 サイズの配列を返します。Rails.applicationMyApp::Applicationrails consolerails c

 Rails.application.call(Rack::MockRequest.env_for("/"))

次のように呼び出すことで、アプリケーションのルートを取得することもできます。

 Rails.application.routes

メイン目的定義の目的はMyApp::Application、おそらく決して使わないであろう楽しいことではなく、アプリケーション固有の設定を内部で定義できるようにすることですconfig/application.rb。フィルターされるパラメータ、アプリケーションのタイムゾーン、自動ロードするディレクトリなどです。これらはすべてRails の設定ガイド

3. MyApp::Application.configure はメソッドですか?

確かにこれはメソッドであり、アプリケーションconfig/application.rbがロードされた後に、アプリケーションの構成にさらに構成オプションを追加することができます。おそらく、このconfig/environments/development.rbメソッドまたはそのディレクトリ内の他の2つのファイルのいずれかで使用されているのを見たことがあるでしょうが、基本的にそれらはすべて、そのファイルに示されているのと同じオプションを使用します。設定ガイド先ほどリンクしました。

4. config は変数ですか? コンソールで確認するにはどうすればいいですか?

config変数」は、実際には、使用されるコード内で定義されたメソッドでありRails::Application、アプリケーションの構成を格納する構成オブジェクトを単純に返します。

コンソールでアクセスするには、 を使用します。これにより、表示しやすいようにRails.application.configかなり大きなオブジェクトが返されます。Rails::Application::Configuration

5. config.logger は???

あなたが言及しているメソッドは、次の行から来ているものだと思いますconfig/environments/production.rb:

# Use a different logger for distributed setups
# config.logger = SyslogLogger.new

この例のメソッドは ではなく でconfig.loggerありconfig.logger=、これは Ruby の世界では「setter」メソッドと呼ばれます。等号のないものは「getter」と呼ばれます。このメソッドは、Rails の運用環境用の代替ロガーを設定し、Rails.loggerコンソール内またはアプリケーション自体を使用してアクセスできるようになります。

これは、ログに何かを出力したい場合に便利です。次のコードを呼び出すだけです。

Rails.logger.info("DEBUG INFO GOES HERE")

6. config.paths.log.first は ...?? -- コンソールに「MyApp::Application.configure.config.paths.log.first」と表示されますが、それが何を意味するのか、またはそこから情報を抽出する方法がわかりません。

Rails アプリケーション内では、特定のディレクトリの場所を変更できます。したがって、このconfig.pathsメソッドは、これらのディレクトリがどこにマップされているかを追跡する方法です。私は Rails を使い始めてからこれまで、この変数を使用したり変更したりする必要は一度もありませんでした。これは、次の 2 つのことを意味します。

  1. Rails プログラマーによってはあまり使用されません。
  2. 私はあまり変化に富んだ生活を送っていません。

好きなように解釈してください。私が言いたいのは、あなたもおそらくそれを使うことはないだろうということです。


これらが Rails の理解を少しでも深めるのに役立つことを願っています。

1ひどいサイコロジョーク。

おすすめ記事