Tôi cũng gặp khó khăn với vấn đề này. Đây là những gì tôi khám phá trên đường đi.
Bạn cần phải là "bên trong" một lớp kế thừa từ Sinatra :: Base (như Sinatra :: Application, được thừa kế từ Base) để có thể sử dụng phương thức development?
, được định nghĩa trong base.rb.
Trong ứng dụng Sinatra cổ điển, bạn đã mã hóa "bên trong" một lớp kế thừa từ Sinatra :: Base. Vì vậy, development?
sẽ chỉ hoạt động "ở mọi nơi".
Trong mô-đun Sinatra các development?
sẽ chỉ làm việc trong Sinatra :: Base tiểu học, chẳng hạn như:
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
Vì vậy, về cơ bản bạn có thể sử dụng một lớp ApplicationController được thừa kế từ Sinatra :: Base và bên đây kiểm tra cho development?
. Cũng vậy với phụ lớp kế thừa từ lớp ApplicationController của bạn:
class UserController < ApplicationController
require 'dotenv' if development?
...
end
Đối với mô-đun Sinatra, trong (chính: Object) mã văn bản "bên ngoài" Sinatra :: Base phụ lớp học, bạn cần phải làm theo Arup's hướng dẫn:
if Sinatra::Base.environment == :development
require 'awesome_print'
require 'dotenv'
Dotenv.load
...
end
Điều gì xảy ra nếu bạn sử dụng nó làm biểu tượng (có dấu hai chấm) yêu cầu "xyz" nếu: phát triển? –
Đã sửa lỗi. Cảm ơn nhiều. Nếu bạn muốn đặt nó như là một câu trả lời, tôi sẽ vui lòng chấp nhận nó như là chính xác. Sự khác biệt giữa cú pháp biểu tượng và ký tự không phải là biểu tượng là gì? Làm cách nào để biết khi nào nên sử dụng? –
@EmanueleFeliziani không sửa chữa '... if: any_symbol_whatsoever' sẽ luôn trả về true, vì ký hiệu không phải là' nil' hoặc 'false'. – matt