2016-10-24 8 views
1

Ruby 2.3.0を使用してIBM Bluemix上のRails 4.2.7アプリケーションに取り組んでいます。私がDeviseをインストールしたときに、ユーザーモデルの移行が生成されました。ただの標準ファイルです。配備中に、移行によって3つのクエリーが起動します。 usersテーブルを作成するための最初の1:ユニークなインデックス作成のためのRailsマイグレーションとCREATE UNIQUE INDEXがDashDB/DB2上で動作しない

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) 

そして2:

CREATE UNIQUE INDEX index_users_on_email ON USERS(email) 
CREATE UNIQUE INDEX index_users_on_reset_password_token ON USERS(reset_password_token) 

最初の文は、表が作成され、罰金実行されます。しかし、問題はテーブルタイプがデフォルトでorganize by columnで作成されていることです。 CREATE UNIQUE INDEXステートメントが失敗し、実行するように見えました。テーブルはorganized by rowである必要があります。

私は移行を削除し、SQLステートメントを介して直接DB内にテーブルを作成し、末尾にorganize by row句を追加し、残りの2つのクエリを実行することができます。私は、私は再び同じ問題にぶつかっておくことができますので、私はと思う

CREATE TABLE schema_migrations (version varchar(255) NOT NULL) 
CREATE UNIQUE INDEX unique_schema_migrations ON schema_migrations (version) 

問題は、移行は、以下の2を実行したいとき、私は同じ問題に遭遇してきたということですが、それが再び失敗しました照会しますすべてのテーブルをデフォルトで行ごとに編成する方法を見つけてください。できれば移行を行うことをお勧めします。以前誰かがこの問題に遭遇しましたか?次

マイ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 

、ここでは私のgemfileです:

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 

答えて

2

を助けることができるデータベース構成パラメーターdft_table_orgがあります。あなたは、コマンドを発行するには、DB2コマンド行プロセッサーまたはCLPPlusを使用する必要があります:あなたが持っているdashDBサービスの種類に応じて、このコマンドを実行するための十分な権限がない可能性があり

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

注意を。

一方、dashDBを使用しているため、列ストアのパフォーマンスの恩恵を受ける予定であり、一意性を強制する以外はインデックスを使用しないため、一意のインデックスを作成する代わりに列に構成された表でもサポートされている一意の制約を表に追加します。など

ALTER TABLE users ADD CONSTRAINT u_users_on_email UNIQUE (email) 

興味深いことに、DB2は、まだこれらの制約をバックアップするユニークなインデックスを作成しますが、彼らは、列organiedテーブル内のデータにアクセスするために使用されることはありません。

+0

残念ながら私はBluemixのCLIにアクセスできませんが、これはこのIBMソリューションの主な欠点の1つであると思います。しかし、私はテーブルを変更することができるようにSQLクエリを実行することができます。また、私は自分のヒントを使って自分のローカルDashDBをセットアップすることができます:-) Webアプリケーションの選択肢が悪いと思いますが、DashDB Transactionalバージョンを使用する必要がありますが、ibm_dbがRailsでどのように動作するかを学習する必要がありました。ありがとう! – Kociamber

関連する問題