Foreman でローカルに正常に動作するシンプルな Sinatra アプリがあります。しかし、Heroku では即座にクラッシュします。
2013-09-17T18:52:37.449716+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path=/ host=rfcstd.herokuapp.com fwd="38.122.223.90" dyno= connect= service= status=503 bytes=
2013-09-17T18:55:29.671059+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path=/ host=rfcstd.herokuapp.com fwd="38.122.223.90" dyno= connect= service= status=503 bytes=
エラーに関するこれ以上の情報はありません。
私のアプリはhttps://developers.google.com/+/quickstart/rubyに基づいています。Procfile と config.ru を複数回繰り返して動作させようとしました。
Procfile.rb >
web: bundle exec ruby signing.rb -p $PORT
Answer:
Starting process with command `bundle exec rackup config.ru -p 14469`
configuration /app/config.ru not found
アプリにはconfig.ruが含まれていなかったので、自分で作成してみました:
Procfile.rb >
web: bundle exec rackup ./config.ru -p $PORT
OR
web: bundle exec rackup config.ru -p $PORT
Config.ru >
require './signin.rb'
run Sinatra::Application
Answer:
at=error code=H10 desc="App crashed" method=GET path=/ host=rfcstd.herokuapp.com fwd="38.122.223.90" dyno= connect= service= status=503 bytes=
Google でコード化された signin.rb が Sinatra を起動しますが、これはラック アプリとして起動する標準的な方法ではないと思います。Heroku はラック アプリを検出したようですが、一部のファイルが使用できないため、チョークが発生するようです。
##
# The Google+ Ruby Quickstart lets you get started with the Google+ platform
# in a few minutes.
#
# The app demonstrates:
# * Using the Google+ Sign-In button to get an OAuth 2.0 refresh token.
# * Exchanging the refresh token for an access token.
# * Making Google+ API requests with the access token, including getting a
# list of people that the user has circled.
# * Disconnecting the app from the user's Google account and revoking tokens.
#
# Author: class@google.com (Gus Class)
require 'bundler/setup'
require 'base64'
require 'rubygems'
require 'json'
require 'sinatra'
require 'google/api_client'
require 'google/api_client/client_secrets'
require 'net/https'
require 'uri'
require 'open-uri'
use Rack::Session::Pool, :expire_after => 86400 # 1 day
# Configuration
# See the README.md for getting the OAuth 2.0 client ID and
# client secret.
# Configuration that you probably don't have to change
APPLICATION_NAME = 'MyAppName'
PLUS_LOGIN_SCOPE = 'https://www.googleapis.com/auth/plus.login'
#set :port, 5000
# Build the global client
$credentials = Google::APIClient::ClientSecrets.load
$authorization = Signet::OAuth2::Client.new(
:authorization_uri => $credentials.authorization_uri,
:token_credential_uri => $credentials.token_credential_uri,
:client_id => $credentials.client_id,
:client_secret => $credentials.client_secret,
:redirect_uri => $credentials.redirect_uris.first,
:scope => PLUS_LOGIN_SCOPE)
$client = Google::APIClient.new(:application_name => APPLICATION_NAME, :application_version => '0.1')