Ja też walczyłem z tym. Oto, co odkryłem po drodze.
Musisz być "wewnątrz" klasy, która dziedziczy po Sinatrze :: Base (takiej jak Sinatra :: Application, która dziedziczy po Base), aby móc korzystać z metody development?
, która jest zdefiniowana w base.rb.
W klasycznej aplikacji Sinatra już kodujesz "w środku" klasę, która dziedziczy po Sinatrze :: Base. Tak więc development?
będzie działać "w dowolnym miejscu".
W modułowej Sinatra development?
będzie działać tylko w Sinatra :: Base podklasy, takie jak:
require 'sinatra/base'
# Placing
# require 'dm-sqlite-adapter' if development?
# here will not work.
class ApplicationController < Sinatra::Base
require 'dm-sqlite-adapter' if development? # But here it works
...
end
# Placing
# require 'dm-sqlite-adapter' if development?`
# AFTER the above class will still not work
class SomethingElse
# nor will `development?` work here, since it is called inside
# a class without Sinatra::Base inheritance
...
end
Więc w zasadzie można użyć klasy ApplicationController która dziedziczy Sinatra :: Base, a wewnątrz tutaj Zobacz dla development?
. To samo odnosi się do podklasy, która dziedziczy z klasy ApplicationController:
class UserController < ApplicationController
require 'dotenv' if development?
...
end
Dla modułowej Sinatra, w (main: Object) tekst kodu „na zewnątrz” Sinatra :: Base podklasy, trzeba wykonać Arup's instrukcje:
if Sinatra::Base.environment == :development
require 'awesome_print'
require 'dotenv'
Dotenv.load
...
end
Co się stanie, jeśli użyjesz go jako symbolu (ze znakiem dwukropka) wymaga "xyz", jeśli: development? –
Naprawiono. Wielkie dzięki. Jeśli chcesz wyrazić to jako odpowiedź, chętnie zaakceptuję to jako poprawne. Jaka jest różnica między składnią symboliczną a nie symboliczną? Skąd mam wiedzieć, kiedy użyć? –
@EmanueleFeliziani to nie jest poprawka '... if: any_symbol_whatsoever' zawsze zwróci true, ponieważ symbol nie jest' nil' ani 'false'. – matt