【问题标题】:heroku production database not workingheroku 生产数据库不工作
【发布时间】:2014-01-25 17:22:58
【问题描述】:

我一直在尝试在生产中部署我的本地应用程序

我的Gemfile

source 'https://rubygems.org'
ruby '2.0.0'

gem 'pry', '0.9.12'
gem 'mysql', '2.9.1'
gem 'rails-api', '0.1.0'
gem 'rails', '4.0.1'
gem 'awesome_print', '1.1.0'

group :test, :development do
  gem 'raddocs', '0.2.0'
  gem 'rspec-rails', '2.13.0'
  gem 'rspec-core', '2.13.1'
  gem 'rspec_api_documentation', '1.0.0'
end

group :development do
  gem 'railroady', '1.1.1'
end

group :test do
  gem 'database_cleaner'
  gem 'capybara', '2.1.0'
  gem 'shoulda-matchers', '1.5.6'
  gem 'factory_girl_rails', '4.0'
  gem "factory_girl", "4.0"
end

我的路线文件中有下一条路线:

post '/region/:id/service' => 'region#service'

我的控制器看起来像这样:

class RegionController < ApplicationController
  def service
    region = Region.find params[:id]
    render text: region.name
  end
end

好的,问题是,当我在开发中使用curl 调用服务时效果很好:

$ curl -X POST localhost:port/region/6/service -d ""

但是当我将文件上传到 heroku 时,我再次调用该服务 我得到 404 not found (error)500 internal server (error)

根据the documentation,我正在使用cleardb插件。

我认为问题在于数据库。起初,我为 production 环境编写了我的 database.yml,根据以下内容获取数据库信息:

$ heroku config | grep CLEARDB_DATABASE_URL

但我认为没有必要,因为heroku可以根据这条线自动完成......我认为是

-----> Writing config/database.yml to read from DATABASE_URL

我尝试了两种方式都没有结果,我真的不知道为什么当我尝试在生产环境中进行查询时服务会崩溃。

我的 database.yml 看起来像

development:
  adapter: mysql
  password: xxx
  database: myapp.development
  pool: 5
  timeout: 5000

test:
  adapter: mysql
  password: xxx
  database: myapp.test_1
  pool: 5
  timeout: 5000

production:
  adapter: mysql
  encoding: utf8
  database: xxx
  username: yyy
  password: zzz
  pool: 5
  timeout: 5000
  host: us-cdbr-east-04.cleardb.com

【问题讨论】:

  • 请发布您的日志,以便我们可以看到您的错误并从那里进行调试。
  • 只是猜测,但我认为您必须删除默认的 postgres 数据库插件。

标签: ruby-on-rails ruby-on-rails-3 heroku ruby-on-rails-4 cleardb


【解决方案1】:

经过一些调试后,我发现 heroku 中的 id 被分配了每 10 个数字,例如我的表格区域之一:

+----+-----------+-------+---------------------+---------------------+
| id | name      | state | created_at          | updated_at          |
+----+-----------+-------+---------------------+---------------------+
|  1 | Brasil    |     1 | 2014-01-08 13:12:56 | 2014-01-08 13:12:56 |
| 11 | Chile     |     1 | 2014-01-08 13:12:56 | 2014-01-08 13:12:56 |
| 21 | Peru      |     1 | 2014-01-08 13:12:56 | 2014-01-08 13:12:56 |
| 31 | Argentina |     1 | 2014-01-08 13:12:56 | 2014-01-08 13:12:56 |
+----+-----------+-------+---------------------+---------------------+

“ClearDB 使用循环复制来提供 master-master MySQL 支持。因此,必须配置某些东西,例如 auto_increment 键(或序列),以便在所有情况下一个主控不使用与另一个主控相同的键。我们通过将 MySQL 配置为跳过某些键,并强制 MySQL 为使用的每个键使用特定的偏移量来做到这一点。我们使用值 10 而不是 2 的原因是为了未来的发展。"

谢谢。

【讨论】:

    猜你喜欢
    • 2014-08-26
    • 2016-05-08
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 2016-05-28
    相关资源
    最近更新 更多