【问题标题】:My rails 4.2.5 app server keeps connecting to production db instead of development db in development mode我的 rails 4.2.5 应用服务器在开发模式下一直连接到生产数据库而不是开发数据库
【发布时间】:2016-08-05 10:37:57
【问题描述】:

我正在本地机器(OS X El Capitan)上运行 Rails 4.2.5 应用程序。 它在开发模式下运行良好。

但后来我决定看看它在生产模式下是如何工作的,所以切换到生产并运行服务器。

bundle install --deployment --without development test
bundle exec rake db:create RAILS_ENV=production
bundle exec rake db:migrate RAILS_ENV=production
bundle exec rake db:seed RAILS_ENV=production
bundle exec rake assets:precompile RAILS_ENV=production
bundle exec rails s -e production

并非一切看起来都很好。所以我做了一些改变,直到一切正常。

之后,我需要添加一些实现的功能,所以再次切换回开发模式并运行服务器。

bundle install
bundle exec rake db:migrate
bundle exec rake db:seed
bundle exec rails s

服务器运行没有问题,但我发现它使用的是生产数据库而不是开发数据库。

我尝试通过执行bundle exec rake tmp:cache:clear 清除所有缓存,但没有帮助。

仅供参考,我将 postgres 用于生产和开发。

这是database.yml 文件:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 30

development:
  <<: *default
  username: <%= ENV['OATV_POSTGRES_USERNAME'] %>
  password: <%= ENV['OATV_POSTGRES_PASSWORD'] %>
  database: <%= ENV['OATV_POSTGRES_DATABASE_DEVELOPMENT'] %>

test:
  <<: *default
  username: <%= ENV['OATV_POSTGRES_USERNAME'] %>
  password: <%= ENV['OATV_POSTGRES_PASSWORD'] %>
  database: <%= ENV['OATV_POSTGRES_DATABASE_TEST'] %>

production:
  <<: *default
  url: <%= ENV['DATABASE_URL'] %>

当然,我已经在本地机器上设置了所有的环境变量,因为我需要在开发、测试和生产模式下进行测试。

这里可能的原因是什么?

提前感谢您的任何回答。

【问题讨论】:

  • 你杀死了之前的守护生产服务器吗?
  • @sixty4bit 对不起。我打错了文字。我实际上并没有将生产服务器作为守护进程运行。相应地修改了问题。
  • 检查 RAILS_ENV 是否在您的环境中导出。也许您这样做是为了方便?
  • 解决方案:重新启动机器并重试。另外你怎么知道你是在生产数据库上运行而不是在开发中?您在本地也有生产数据库?
  • @Aleks 我的本地机器上有一个生产数据库。

标签: ruby-on-rails postgresql ruby-on-rails-4 production dev-to-production


【解决方案1】:

只是写在这里。 可能的解决方案:

1.重新启动服务器(它应该清除所有不需要的变量 生产环境设置,运行时不清除 发展模式) 例如。 url: &lt;%= ENV['DATABASE_URL'] %&gt;是生产环境设置的,不是开发模式设置的

2.更改:

   development:
     <<: *default

到:

  development:
    <<: *default
    url: postgres:///db/database-name

因此,您将手动指向本地开发数据库,​​而不是在生产模式下使用已保存的 URL

或者(也许)第三个:

3.运行bundle exec rails s -e development

【讨论】:

  • 解决方案 #2 对我有用,但并不完美。我在 database.yml 中明确指定了用于开发的 postgres url,现在它连接到开发数据库,​​这是正确的。但我还有另一个问题。 Rails 控制台 (bundle exec rails c) 不加载 pry-rails,它加载默认的 irb。我在 Gemfile 的开发组中指定了 pry-rails。
  • 这里是 rails 控制台日志:→ bundle exec rails c -e development Running via Spring preloader in process 89518 Loading development environment (Rails 4.2.5) irb(main):001:0&gt;
  • @consigliere heh,这与连接到数据库有点不同,但对我来说,这一切都归结为问题的相同原因 - 一些变量是在生产服务器运行时设置的,现在那些变量没有在开发模式下设置,它一直以这种方式运行(解决方案#2证明了这一点)。您正在尝试修补它(但是可以,如果重新启动是不可能的)。尝试运行bundle install -e development 或类似的东西(如果可以使用该命令),并尝试在终端source ~/.bashrc 中运行以尝试再次从该文件重新加载所有变量。
  • 看起来问题的根本原因是DATABASE_URL env 变量。即使在机器重新启动后,我的另一个 Rails 应用程序也一直连接到这个 oatv_production 数据库而不是它的真实数据库。一旦我从我的 zsh 中删除 DATABASE_URL env var 并重新加载,它就像一个魅力。
  • 是的,没错。 “You can connect to the database by setting an environment variable ENV['DATABASE_URL'] or by using a configuration file called config/database.yml.edgeguides.rubyonrails.org/configuring.html部分3.14
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 2021-03-27
  • 2015-02-21
  • 1970-01-01
相关资源
最近更新 更多