Open sashazykov opened 4 years ago
1) it is evaluated in /opt/reports_data/app/controllers/data.rb:37
when the controller code is loaded.
2) also evaluated in /opt/reports_data/app/controllers/api.rb:29
when the controller is mounted with mount Controllers::Data
@alexandrz I agree it looks weird :disappointed:
require 'grape'
class AddressAPI < Grape::API
params do
requires :test, type: String
puts 'Address API'
end
post '/address' do
end
end
class API < Grape::API
version 'v1', using: :path
mount AddressAPI
end
Address API
will be printed 2 times. The reason is here where every method call gets added to the setup variable. Considering AddressAPI
, the setup variable will contain, params and post:
[
{method: 'params', args: args, block: block},
{method: 'get', args: args, block: block}
]
Then when AddressAPI
gets mounted all method calls stored in the setup variable gets replayed on API
there.
There is a memory leak issue related to this approach.
You might consider a native Ruby include method instead, more info there https://nesteryuk.info/2020/04/12/grape-include-is-still-better-for-code-splitting.html. It is cheaper, our project uses this approach for 6 years without any issues.
I put the following code into my namespace definition:
and it is executed twice, I see two backtraces. Is this normal? The file itself is loaded only once.