【问题标题】:Rails - Migrate error when change the database info to environment variables - AWSRails - 将数据库信息更改为环境变量时出现迁移错误 - AWS
【发布时间】:2018-06-25 02:00:13
【问题描述】:

我有 2 台服务器。

  1. Amazon EC2 - 真正的生产服务器。这是应用的实时版本
  2. Heroku - 这是我的“测试”生产服务器。在生产服务器中进行了一些操作,然后,为了在发送到 AWS EC2 之前进行测试,我在 Heroku 中进行了测试。

在文件config/database.yml中,我有以下代码:

production:
    adapter: <%= ENV['DB_ADAPTER'] ||= 'postgresql' %>
    encoding: utf8
    pool: 5
    host: 127.0.0.1
    username: my_pg_username
    password: my_pg_password
    database: my_pg_database

在 AWS 中运行良好,但在 Heroku 中的连接数据不同。

为了解决这个问题,我在两台服务器中都创建了一些环境变量。

在 Heroku 中,非常容易。我转到 App Settings 并在 Config Vars 中设置名称和值。

在 AWS,我:

  1. 通过 SSH 登录
  2. 运行sudo nano .profile编辑文件.profile
  3. 添加代码

    export PG_DB_HOST='127.0.0.1'
    export PG_DB_USER='my_pg_user'
    export PG_DB_PASS='my_pg_password'
    export PG_DB_NAME='my_pg_database'
    
  4. 之后,我在终端中运行这些相同的代码。这样一来,环境变量就会保持不变。

为了测试环境变量是否有效,我登录服务器并登录rails console,然后键入变量,并正确返回值。

在文件config/database.yml中,我改了代码:

production:
    adapter: <%= ENV['DB_ADAPTER'] ||= 'postgresql' %>
    encoding: utf8
    pool: 5
    host: <%= ENV['PG_DB_HOST'] %>
    username: <%= ENV['PG_DB_USER'] %>
    password: <%= ENV['PG_DB_PASS'] %>
    database: <%= ENV['PG_DB_NAME'] %>

在 Heroku 中,部署后工作正常。

在 AWS 中,运行 cap production deploy 时出现错误。在任务rake db:migrate中,我得到了这个错误:

    01 bundle install --path /home/ubuntu/myapp/shared/bundle --without development test --deployment --quiet
    ✔ 01 ubuntu@XX.XX.XX.XXX 4.514s
00:27 deploy:migrate
    [deploy:migrate] Run `rake db:migrate`
00:28 deploy:migrating
    01 bundle exec rake db:migrate
    01 DEPRECATION WARNING: The configuration option `config.serve_static_assets` has been renamed to `config.serve_static_files` to c…
    01
    01 rake aborted!
    01
    01 ActiveRecord::NoDatabaseError: FATAL:  role "ubuntu" does not exist
    01
    01 /home/ubuntu/myapp/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/postgresql_adapter…
    01
    01 /home/ubuntu/myapp/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/postgresql_adapter…
    01
    01 /home/ubuntu/myapp/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/postgresql_adapter…
    01
    01 /home/ubuntu/myapp/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/postgresql_adapter…
    01
    01 /home/ubuntu/myapp/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/postgresql_adapter…
    01
    01 /home/ubuntu/myapp/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/abstract/connectio…
    01
    01 /home/ubuntu/myapp/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/abstract/conn

如果我返回旧值,就可以了。使用环境变量,中断。

环境

ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
rails -v: Rails 4.2.3
pg_config --version: PostgreSQL 9.3.8
psql --version: psql (PostgreSQL) 9.3.8
bundle -v: Bundler version 1.13.7
Ubuntu 14.04.2 LTS

感谢任何帮助。谢了!

【问题讨论】:

    标签: ruby-on-rails amazon-web-services ruby-on-rails-4 ubuntu-14.04


    【解决方案1】:

    索马尔--

    您可以尝试一次切换到一个 ENV 变量。首先更新config/database.yml 以使用ENV['PG_DB_HOST'],将其他值保留为硬编码。尝试部署并查看是否收到错误。如果没有,继续添加剩余的 ENV 变量,直到部署失败。

    这可能会帮助您确定是否是特定的 ENV 变量导致了问题。

    谢谢!

    【讨论】:

    • 嘿@Jeremy!谢谢你的回答!照你说的做后,问题就解决了。我认为这不是在 AWS EC2 中创建环境变量的正确方法...
    猜你喜欢
    • 2018-08-26
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    相关资源
    最近更新 更多