【发布时间】:2016-12-10 10:40:59
【问题描述】:
我想在this method 之后用一个小的 Sinatra 应用伪造一个 API。这意味着我有一个 Rails 应用程序,并且在 spec/support 文件夹中,有一个非常简单的 Sinatra 应用程序:
module FakePrograms
class Application < Sinatra::Base
get "/API/V1/programs" do
{
programs: [
...
]
}.to_json
end
end
end
部分目标是在本地启动这个应用程序,这样我就可以使用假 API 处理我的 Rails 应用程序。问题:当我做ruby spec/support/fake_programs.rb时,应用程序无法启动,我得到一个
config/puma.rb:14:in `block in _load_from':
uninitialized constant
#<Class:#<Puma::DSL:0x007fac0b0e0380>>::ActiveRecord (NameError)
看起来 Sinatra 正在使用我的 Rails 配置启动。我的虚假 API 不需要 ActiveRecord 或 Puma。
我读过this question 和this other one,但他们的语境不同,因为他们需要 Sinatra 应用与 Rails 应用共享路线。
config/puma.rb 的内容:
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['MAX_THREADS'] || 5)
threads threads_count, threads_count
preload_app!
rackup DefaultRackup
port ENV['PORT'] || 3000
environment ENV['RACK_ENV'] || 'development'
on_worker_boot do
# Worker specific setup for Rails 4.1+
# See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot
ActiveRecord::Base.establish_connection
end
我正在查看 config.ru 文件,但 @max 是正确的,它不相关。
【问题讨论】:
-
如果您直接使用
ruby spec/support/fake_programs.rb调用 ruby 文件,则不明白为什么会读取config.ru。真的是这样吗?也许也可以显示您的config.ru和config/puma.rb。 -
你是对的,问题已更新。
标签: ruby-on-rails ruby sinatra puma