QA@IT

rails new project -d postgresql を指定した時に変更される部位

4480 PV

Herokuに作ったアプリを設置するためにPostgresqlにDBを変更しているのですが

rails new project -d postgresql

と作成時にDBを指定する方法と

rails new project

とDBを明示的に指定せずSQLite3を使い、Gemfile内の

gem 'sqlite3'

gem 'pg'

に書き直す方法とになにか違いはあるのでしょうか?

rails new project -d postgresql

だと自動的にどこかが変更されてるのではないかと思い質問いたしました。

##追記
/config/database.yml が異なることはわかりました。

回答

気になったので、差分を取ってみました。

  • ruby 2.0.0
  • rails 3.2.13

結論は書かれているように

  • RAILS_ROOT/config/database.yml
  • RAILS_ROOT/Gemfile

が違う程度でした。

secret_token は new するたびに違うでしょう。

diff --git a/Gemfile b/Gemfile
index 9a2ccae..dae481c 100644
--- a/Gemfile
+++ b/Gemfile
@@ -5,7 +5,7 @@ gem 'rails', '3.2.13'
 # Bundle edge Rails instead:
 # gem 'rails', :git => 'git://github.com/rails/rails.git'

-gem 'sqlite3'
+gem 'pg'


 # Gems used only for assets and not required
diff --git a/config/database.yml b/config/database.yml
index 51a4dd4..07a63a4 100644
--- a/config/database.yml
+++ b/config/database.yml
@@ -1,25 +1,55 @@
-# SQLite version 3.x
-#   gem install sqlite3
+# PostgreSQL. Versions 8.2 and up are supported.
+#
+# Install the pg driver:
+#   gem install pg
+# On Mac OS X with macports:
+#   gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
+# On Windows:
+#   gem install pg
+#       Choose the win32 build.
+#       Install PostgreSQL and put its /bin directory on your path.
+#
+# Configure Using Gemfile
+# gem 'pg'
 #
-#   Ensure the SQLite 3 gem is defined in your Gemfile
-#   gem 'sqlite3'
 development:
-  adapter: sqlite3
-  database: db/development.sqlite3
+  adapter: postgresql
+  encoding: unicode
+  database: sample_development
   pool: 5
-  timeout: 5000
+  username: sample
+  password:
+
+  # Connect on a TCP socket. Omitted by default since the client uses a
+  # domain socket that doesn't need configuration. Windows does not have
+  # domain sockets, so uncomment these lines.
+  #host: localhost
+  #port: 5432
+
+  # Schema search path. The server defaults to $user,public
+  #schema_search_path: myapp,sharedapp,public
+
+  # Minimum log levels, in increasing order:
+  #   debug5, debug4, debug3, debug2, debug1,
+  #   log, notice, warning, error, fatal, and panic
+  # The server defaults to notice.
+  #min_messages: warning

 # Warning: The database defined as "test" will be erased and
 # re-generated from your development database when you run "rake".
 # Do not set this db to the same as development or production.
 test:
-  adapter: sqlite3
-  database: db/test.sqlite3
+  adapter: postgresql
+  encoding: unicode
+  database: sample_test
   pool: 5
-  timeout: 5000
+  username: sample
+  password:

 production:
-  adapter: sqlite3
-  database: db/production.sqlite3
+  adapter: postgresql
+  encoding: unicode
+  database: sample_production
   pool: 5
-  timeout: 5000
+  username: sample
+  password:
diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb
index 863e732..a24e327 100644
--- a/config/initializers/secret_token.rb
+++ b/config/initializers/secret_token.rb
@@ -4,4 +4,4 @@
 # If you change this key, all old signed cookies will become invalid!
 # Make sure the secret is at least 30 characters and all random,
 # no regular words or you'll be exposed to dictionary attacks.
-Sample::Application.config.secret_token = '0d3f726bef0b61706e11ecfd53d7f0812891d0e362fa473fa84a665751f8f44f69db63dcfc6d858bce3535353d0036f7ec12334bd6e68e28fec1500f3c586180'
+Sample::Application.config.secret_token = '9fa05a3100fbef263527627c96d29f7127dc2caa977c14c7a37cabea383e4122a0c18719660eaaef32e261ece8ad06177dac1b781c55a98f9d0c57a0fa249018'

補足 どのように確認したか。

rails new sample
cd sample
git init
git add .
git commit -m 'initial'
cd ..
mv sample sample_old

rails new sample -d postgresql
mv .sample_old/.git sample
cd sample
git diff
編集 履歴 (2)
  • ありがとうございます!
    secret_token.rbが何故生成されてるかわからなかったので調べたらRailsはSession管理をCookieで行うために秘密鍵を使ってる事がわかりました。

    確認方法も大変勉強になりました。git diffを使えばできるんですね。
    -

ちなみに、Herokuにコードをpushすると、Heroku側の環境に合わせてdatabase.ymlは、Heroku上のアプリケーションの環境変数DATABASE_URLに設定されたpostgresqlに接続されるように上書きされます。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。