您在Ruby中使用的数据库抽象/适配器是什么?我主要对数据导向的功能感兴趣,而不是那些具有对象映射的功能(如活动记录或数据映射器).
我目前正在使用续集.还有其他选择吗?
我最感兴趣的是:
目的是在编写代码时操纵具有未知结构的数据,这与对象映射相反,其中结构或大多数结构通常是众所周知的.我不需要对象映射开销.
有哪些选项,包括对象映射库的后端?
我在运行heroku db时遇到问题:pull和db:push命令.我的应用程序在bamboo-ree-1.8.7堆栈上运行Rails 3.我是Sequel的新手,我不确定脚本在抱怨什么.
$ heroku db:push
Loaded Taps v0.3.14
自动检测本地数据库:postgres://xxx@127.0.0.1/xxx_development?encoding = utf8
警告:应用程序'profreelas'中的数据将被覆盖且无法恢复.
无法连接到数据库:NameError - >未初始化的常量Sequel :: Postgres :: PGError
附加信息:
我的水龙头,续集和heroku宝石是最新的
我正在运行pg db adapter gem
在我的本地机器上运行postgresql
我一直在玩Sequel和Sequel :: Model.
我Group用很多Items(one_to_many)创建了一个.
我可以:
Group.new << Item.new
Run Code Online (Sandbox Code Playgroud)
但不是:
Group.new.add_item(Item.new)
Run Code Online (Sandbox Code Playgroud)
也不:
Item.new.group=Group.new.
Run Code Online (Sandbox Code Playgroud)
它抱怨Group没有主键.
如果我保存group,它会被保存但项目不会被保存.
如何对所有内容进行递归保存?
我正在使用Ruby,或者更具体地说是使用Sequel ORM的Ramaze框架.所以请不要告诉我有关Paperclip宝石的信息,因为它只与ActiveRecord兼容.
考虑到这一点,我如何使用Ruby和Sequel将图像存储在数据库中?
require 'sequel'
require 'jdbc/postgres'
DB = Sequel.connect("jdbc:postgresql://user:pass@domain/database")
DB.tables
Run Code Online (Sandbox Code Playgroud)
返回:
....(bla bla bla stack trace bla bla bla)....
Sequel::DatabaseConnectionError: Java::OrgPostgresqlUtil::PSQLException: The connection attempt failed.
...........
Run Code Online (Sandbox Code Playgroud)
我也试过了
jdbc:postgresql://domain/database?user=name&pass=word
Run Code Online (Sandbox Code Playgroud)
并且也有错误,但是另一个错误('密码请求但未提供')
红宝石1.9.3 - jruby 1.7.3
我看了看,试了很多代码样本,但是我无法让Sequel工作所以,在使用jruby时如何获得与postgres接口的续集?
我从Ruby的Sequel数据库库开始.
给出以下代码:
require 'sequel'
db = Sequel.connect('sqlite://users.db')
users = db[:users]
users.first.delete
Run Code Online (Sandbox Code Playgroud)
Ruby抛出错误:
'delete' : wrong number of arguments (0 for 1) (ArgumentError)
Run Code Online (Sandbox Code Playgroud)
我可以删除多条记录,但.first.delete不起作用.怎么了?
我正在为一个小应用程序构建数据模型,并希望利用某些方法中的急切加载 - 即我事先知道某些关联将被使用的方法.
我已经阅读了该.eager方法的Sequel :: Model :: Association指南,但它让我有点困惑.一个典型的例子可能是:
Artist.eager( :albums => :tracks ).all
Run Code Online (Sandbox Code Playgroud)
它只使用三个查询加载所有Artist对象及其预加载的所有专辑字段,并预加载所有曲目.到现在为止还挺好.
但是说我想通过其主键加载一个艺术家,并且仍然预先加载了专辑+曲目(仍然有三个查询,可能比跟踪每个专辑的关联少很多)?我看不到任何这样的例子.一点点实验给了我
Artist.eager( :albums => :tracks ).where( :id => id ).all.first
Run Code Online (Sandbox Code Playgroud)
这似乎至少有效.我通过调用它确认了急切加载,然后关闭数据库,并显示我仍然可以访问关联.
但是,我觉得我错过了一些东西.构造,必须将主键传递给where子句,获得完整的数据集,然后要求第一项似乎很尴尬.我正在寻找这样的东西:
Artist.eager( :albums => :tracks )[ id ]
Run Code Online (Sandbox Code Playgroud)
...一种简单的方式来声明我想加载一个对象,并急切加载它的一些关联.
我也发现,我可以创建这样一个自定义的关联关系:
def eager_albums
albums_dataset.eager( :tracks ).all
end
Run Code Online (Sandbox Code Playgroud)
但这很难使用,因为代码必须以不同的方式请求关联.
我的问题:我的构造是否Artist.eager( :albums => :tracks ).where( :id => id ).all.first按照我的想法在续集中做了,我可以做得更好(更简单的代码)吗?
我有一张桌子transactions
id | bigint | NOT NULL DEFAULT nextval('transactions_id_seq'::regclass)
transaction_id | bigint | NOT NULL
middleware_id | text |
opname | optype | NOT NULL
created_at | timestamp without time zone | NOT NULL
finished_at | timestamp without time zone |
request | jsonb | NOT NULL
answer | jsonb |
Run Code Online (Sandbox Code Playgroud)
其中请求可以包含以下数据:
{ plugin_id: string, item_src_id: string, item_dst_id: string, payload: {}}
或
{ plugin_id: string, item_id: string, payload: {}}
item_id我可以使用纯 SQL来选择事务列表:
SELECT id, request
FROM transactions
WHERE 'BEX456' …Run Code Online (Sandbox Code Playgroud) 我无法解决AWS Lambda上的gem加载错误。
{
"errorMessage": "LoadError: libpq.so.5: cannot open shared object file: No such file or directory - /var/task/vendor/bundle/ruby/2.5.0/gems/pg-1.1.4/lib/pg_ext.so",
"errorType": "Function<Sequel::AdapterNotFound>",
"stackTrace": [
"/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
"/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
"/var/task/vendor/bundle/ruby/2.5.0/gems/pg-1.1.4/lib/pg.rb:4:in `<top (required)>'",
"/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
"/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
"/var/task/vendor/bundle/ruby/2.5.0/gems/sequel-5.16.0/lib/sequel/adapters/postgres.rb:6:in `<top (required)>'",
"/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
"/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
"/var/task/vendor/bundle/ruby/2.5.0/gems/sequel-5.16.0/lib/sequel/database/connecting.rb:88:in `load_adapter'",
"/var/task/vendor/bundle/ruby/2.5.0/gems/sequel-5.16.0/lib/sequel/database/connecting.rb:17:in `adapter_class'",
"/var/task/vendor/bundle/ruby/2.5.0/gems/sequel-5.16.0/lib/sequel/database/connecting.rb:45:in `connect'",
"/var/task/vendor/bundle/ruby/2.5.0/gems/sequel-5.16.0/lib/sequel/core.rb:121:in `connect'",
"/var/task/vendor/bundle/ruby/2.5.0/gems/sequel-5.16.0/lib/sequel/core.rb:399:in `adapter_method'",
"/var/task/vendor/bundle/ruby/2.5.0/gems/sequel-5.16.0/lib/sequel/core.rb:406:in `block (2 levels) in def_adapter_method'",
"/var/task/lib/warehouse/loader.rb:5:in `connection'",
"/var/task/lib/warehouse/loader.rb:24:in `initialize'",
"/var/task/lib/warehouse/update.rb:43:in `new'",
"/var/task/lib/warehouse/update.rb:43:in `block in handle'",
"/var/task/lib/warehouse/update.rb:42:in `each'",
"/var/task/lib/warehouse/update.rb:42:in `handle'",
"/var/task/lambda.rb:11:in `handler'"
]
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Sequel库从AWS Lambda建立PSQL连接,但似乎该函数找不到so文件。我已将依赖关系打包到vendor/bundle,在CodeBuild上的Ubuntu中内置,并验证了.so文件是否存在于上载到lambda的结果工件中。我还编辑了$ …
如何创建CHECK约束以检查续集中的一系列可能值.一个Ruby ORM.
所有尝试似乎都会CHECK (1 = 0)在输出日志中看到.
这是我正在尝试使用Sequel的DSL建模的表格:
create table memberships(
id integer primary key autoincrement
, group_id integer references groups(id) on delete cascade
, user_id integer references users(id) on delete cascade
, role char check (role in ('u','a','o')) default 'u'
, unique(group_id, user_id, role)
);
Run Code Online (Sandbox Code Playgroud)
这是续集架构生成代码:
db.create_table(:memberships){
primary_key :id
foreign_key :user_id, :users
foreign_key :group_id, :groups
char :role, default: 'u'
check{role=='u' or role=='a'} #<-----this line generates CHECK (1 = 0)
unique [:user_id, :group_id, :role]
}
Run Code Online (Sandbox Code Playgroud) sequel ×10
ruby ×9
postgresql ×3
adapter ×1
aws-lambda ×1
blob ×1
heroku ×1
image ×1
jdbc ×1
jruby ×1
pg ×1
ramaze ×1
rubygems ×1
sequel-gem ×1
sqlite ×1