首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Sinatra应用程序中使用Ruby gem中的模块

如何在Sinatra应用程序中使用Ruby gem中的模块
EN

Stack Overflow用户
提问于 2019-12-22 11:56:37
回答 1查看 176关注 0票数 0

我正在处理一个未发布的gem,它在Rails中工作正常。它有一个需要包含在ActiveRecord::基类中的模块。

我的Sinatra应用程序如下所示:

代码语言:javascript
复制
# app.rb
require 'rubygems'
require 'sinatra'
require 'sinatra/activerecord'

set :database, "sqlite3:project-name.sqlite3"

get '/' do
  @users = User.all
  erb :index
end

class User < ActiveRecord::Base
end

我的gem文件如下所示:

代码语言:javascript
复制
source 'https://rubygems.org'

gem 'activerecord'
gem 'sinatra-activerecord'
gem 'sqlite3'
gem 'rake'
gem "my_module", path: "../my_module"

我的Gemfile.lock看起来像这样:

代码语言:javascript
复制
PATH
  remote: ../my_module
  specs:
    my_module (1.49.0)
      activerecord (>= 4.2)

GEM
  remote: https://rubygems.org/
  specs:
    activemodel (6.0.2.1)
      activesupport (= 6.0.2.1)
    activerecord (6.0.2.1)
      activemodel (= 6.0.2.1)
      activesupport (= 6.0.2.1)
    activesupport (6.0.2.1)
      concurrent-ruby (~> 1.0, >= 1.0.2)
      i18n (>= 0.7, < 2)
      minitest (~> 5.1)
      tzinfo (~> 1.1)
      zeitwerk (~> 2.2)
    concurrent-ruby (1.1.5)
    i18n (1.7.0)
      concurrent-ruby (~> 1.0)
    minitest (5.13.0)
    mustermann (1.0.3)
    rack (2.0.8)
    rack-protection (2.0.7)
      rack
    rake (13.0.1)
    sinatra (2.0.7)
      mustermann (~> 1.0)
      rack (~> 2.0)
      rack-protection (= 2.0.7)
      tilt (~> 2.0)
    sinatra-activerecord (2.0.14)
      activerecord (>= 3.2)
      sinatra (>= 1.0)
    sqlite3 (1.4.2)
    thread_safe (0.3.6)
    tilt (2.0.10)
    tzinfo (1.2.5)
      thread_safe (~> 0.1)
    zeitwerk (2.2.2)

PLATFORMS
  ruby

DEPENDENCIES
  activerecord
  rake
  my_module!
  sinatra-activerecord
  sqlite3

BUNDLED WITH
   2.0.2

如果我手动添加模块,它可以很好地工作:

代码语言:javascript
复制
# app.rb
require 'rubygems'
require 'sinatra'
require 'sinatra/activerecord'

set :database, "sqlite3:project-name.sqlite3"

get '/' do
  @users = User.all
  erb :index
end

module MyModule
  extend ActiveSupport::Concern
  class_methods do
    #something here
  end
end

class User < ActiveRecord::Base
  include MyModule
end

我希望能够做到:

代码语言:javascript
复制
# app.rb
require 'rubygems'
require 'sinatra'
require 'sinatra/activerecord'
require 'my_module'

set :database, "sqlite3:project-name.sqlite3"

get '/' do
  @users = User.all
  erb :index
end

class User < ActiveRecord::Base
  include MyModule
end

我得到了错误

代码语言:javascript
复制
cannot load such file -- my_module (LoadError) 

当我使用require语句或

代码语言:javascript
复制
uninitialized constant User::MyModule (NameError)

如果我移除require

EN

回答 1

Stack Overflow用户

发布于 2019-12-22 13:46:31

如果我使用

代码语言:javascript
复制
bundle exec ruby app.rb

而不是

代码语言:javascript
复制
ruby app.rb
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59441505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档