0

ローカル アプリを本番環境にデプロイしようとしています

私の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が見つかりません(エラー)または500内部サーバー(エラー)が発生します

ドキュメントcleardbに従ってアドオンを使用しています。

問題はデータベースだと思います。最初に、次のようにデータベース情報を本番環境用に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
4

1 に答える 1

1

いくつかのデバッグの後、heroku の ID に 10 個の数字が割り当てられていることがわかりました。たとえば、テーブル リージョンの 1 つが次のように見えます。

+----+-----------+-------+---------------------+---------------------+
| 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 は循環レプリケーションを使用して、マスター マスター MySQL サポートを提供します。したがって、あるマスターが他のマスターと同じキーを使用しないようにするために、auto_increment キー (またはシーケンス) などの特定のものを構成する必要があります。これは、特定のキーをスキップするように MySQL を構成し、使用されるキーごとに特定のオフセットを使用するように MySQL を強制することによって実現されます。2 ではなく 10 の値を使用する理由は、将来の開発のためです。"

ありがとう。

于 2014-01-08T14:41:49.960 に答える