如何在Rails应用模板中使用postgres?

时间:2016-02-15 20:35:33

标签: ruby-on-rails postgresql

我正在为应用创建自定义模板,我添加了pg而不是sqlite:

gem 'pg'

gsub_file "Gemfile", /^gem\s+["']sqlite3["'].*$/,''

after_bundle do
  generate "rspec:install"
  generate "simple_form:install"
end

但是,如果我创建这样的应用程序,如果默认情况下将为sqlite3配置database.yml文件,我如何指定应用程序来添加postgresql的配置而不是我的模板?就像我添加--database=postgresql选项

一样

2 个答案:

答案 0 :(得分:1)

不需要向用户询问应用程序名称,因为app_name已经填充了它。

Thor命令对于处理文件非常有帮助,可以使用.erb模板并使用template method从模板中传递值:

# config the app to use postgres
remove_file 'config/database.yml'
template 'database.erb', 'config/database.yml'

database.erb:

default: &default
  adapter: postgresql
  host: db 
  port: 5432
  pool: 5
  timeout: 5000
  user: postgres
  password: postgres

development:
  <<: *default
  database: <%= app_name %>_development

test:
  <<: *default
  database: <%= app_name %>_test

production:
  <<: *default
  database: <%= app_name %>_production

答案 1 :(得分:0)

我的挖掘方式有所不同。这是我的template.rb

remove_file 'config/database.yml'

file 'config/database.yml', <<-CODE
  # PostgreSQL. Versions 9.1 and up are supported.
  #
  # Install the pg driver:
  #   gem install pg
  # On OS X with Homebrew:
  #   gem install pg -- --with-pg-config=/usr/local/bin/pg_config
  # On 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'
  #
  default: &default
    adapter: postgresql
    encoding: unicode
    # For details on connection pooling, see Rails configuration guide
    # http://guides.rubyonrails.org/configuring.html#database-pooling
    pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

  development:
    <<: *default
    database: foo_development

    # The specified database role being used to connect to postgres.
    # To create additional roles in postgres see `$ createuser --help`.
    # When left blank, postgres will use the default role. This is
    # the same name as the operating system user that initialized the database.
    #username: foo

    # The password associated with the postgres role (username).
    #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

    # The TCP port the server listens on. Defaults to 5432.
    # If your server runs on a different port number, change accordingly.
    #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
    # Defaults to warning.
    #min_messages: notice

  # 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:
    <<: *default
    database: foo_test

  # As with config/secrets.yml, you never want to store sensitive information,
  # like your database password, in your source code. If your source code is
  # ever seen by anyone, they now have access to your database.
  #
  # Instead, provide the password as a unix environment variable when you boot
  # the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database
  # for a full rundown on how to provide these environment variables in a
  # production deployment.
  #
  # On Heroku and other platform providers, you may have a full connection URL
  # available as an environment variable. For example:
  #
  #   DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase"
  #
  # You can use this database configuration with:
  #
  #   production:
  #     url: <%= ENV['DATABASE_URL'] %>
  #
  production:
    <<: *default
    database: foo_production
    username: foo
    password: <%= ENV['FOO_DATABASE_PASSWORD'] %>
CODE