Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails迁移和创建唯一索引在DashDB/DB2上不起作用_Ruby On Rails_Ibm Cloud_Db2 Luw_Unique Index_Dashdb - Fatal编程技术网

Ruby on rails Rails迁移和创建唯一索引在DashDB/DB2上不起作用

Ruby on rails Rails迁移和创建唯一索引在DashDB/DB2上不起作用,ruby-on-rails,ibm-cloud,db2-luw,unique-index,dashdb,Ruby On Rails,Ibm Cloud,Db2 Luw,Unique Index,Dashdb,我正在使用Ruby 2.3.0在IBMBlueMix上开发Rails 4.2.7应用程序。当我安装Desive时,已经生成了用户模型迁移,只是一个标准文件,没有什么特别的选项。在部署过程中,迁移将触发三个查询。创建用户表的第一个选项: CREATE TABLE users ( id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY, email varchar(255) DEFAULT '' NOT NU

我正在使用Ruby 2.3.0在IBMBlueMix上开发Rails 4.2.7应用程序。当我安装Desive时,已经生成了用户模型迁移,只是一个标准文件,没有什么特别的选项。在部署过程中,迁移将触发三个查询。创建用户表的第一个选项:

CREATE TABLE users (
 id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY, 
 email varchar(255) DEFAULT '' NOT NULL, 
 encrypted_password varchar(255) DEFAULT '' NOT NULL, 
 reset_password_token varchar(255),  
 reset_password_sent_at timestamp,  
 remember_created_at timestamp,  
 sign_in_count integer DEFAULT 0 NOT NULL,  
 current_sign_in_at timestamp,  
 last_sign_in_at timestamp,  
 current_sign_in_ip varchar(255),  
 last_sign_in_ip varchar(255),  
 created_at timestamp NOT NULL,  
 updated_at timestamp NOT NULL)
CREATE UNIQUE INDEX index_users_on_email ON USERS(email)
CREATE UNIQUE INDEX index_users_on_reset_password_token ON USERS(reset_password_token)
两个用于创建唯一索引:

CREATE TABLE users (
 id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY, 
 email varchar(255) DEFAULT '' NOT NULL, 
 encrypted_password varchar(255) DEFAULT '' NOT NULL, 
 reset_password_token varchar(255),  
 reset_password_sent_at timestamp,  
 remember_created_at timestamp,  
 sign_in_count integer DEFAULT 0 NOT NULL,  
 current_sign_in_at timestamp,  
 last_sign_in_at timestamp,  
 current_sign_in_ip varchar(255),  
 last_sign_in_ip varchar(255),  
 created_at timestamp NOT NULL,  
 updated_at timestamp NOT NULL)
CREATE UNIQUE INDEX index_users_on_email ON USERS(email)
CREATE UNIQUE INDEX index_users_on_reset_password_token ON USERS(reset_password_token)
第一条语句运行正常,正在创建表。但是,问题是默认情况下,表类型是使用
按列组织的
CREATE UNIQUE INDEX
语句失败,要运行它们,表必须按行组织

我可以删除迁移,通过SQL语句直接在DB中创建表,并在末尾添加
organizebyrow
子句,然后运行剩下的两个查询

问题是,当迁移希望运行以下两个查询时,我遇到了相同的问题,但再次失败:

CREATE TABLE schema_migrations (version varchar(255) NOT NULL)
CREATE UNIQUE INDEX unique_schema_migrations ON schema_migrations (version)
我想我可以再次碰到同样的问题,因此我想找到一种方法,使所有表在默认情况下按行组织,最好是通过迁移。以前有人遇到过这个问题吗

我的
manifest.yml
如下所示:

applications:
- path: .
  buildpack: https://github.com/cloudfoundry/ruby-buildpack.git
  memory: 1024M
  instances: 1
  domain: eu-gb.mybluemix.net
  name: windykacja
  host: windykacja
  disk_quota: 1024M
  services:
  - dashDB-win
这是我的档案:

source 'https://rubygems.org'
ruby '2.3.0'

gem 'rails', '4.2.7'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'devise'
gem 'bootstrap-sass', '~> 3.3.6'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc


group :production do
    gem 'rails_12factor'
    gem 'ibm_db'
end

group :development, :test do
  gem 'byebug'
end

group :development do
  gem 'web-console', '~> 2.0'
  gem 'spring'
  gem 'sqlite3'
end

有一个数据库配置参数可以提供帮助。您必须使用DB2命令行处理器或CLPPlus来发出以下命令:

update db cfg for <your-db-name> using dft_table_org row

有趣的是,DB2仍然会创建唯一的索引来支持这些约束,但它们不会用于列组织表中的数据访问。

不幸的是,我无法访问Bluemix上的CLI,我认为这是IBM解决方案的主要缺点之一。但是,我可以运行SQL查询,以便能够更改表。此外,我还可以使用您的提示设置本地DashDB:-)我知道这对于web应用程序来说是一个非常糟糕的选择,我应该使用DashDB事务性版本,但我需要了解ibm_db如何与Rails一起工作。谢谢