3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

elecoma(エレコマ)をherokuで動かす

Last updated at Posted at 2014-10-01

エレコマはrails製のネットショップのシステムで、オープンソースで公開されています。今回の目的はこのエレコマを使ってherokuにアップすることです。

##ローカル環境に構築

1.https://github.com/elecoma/elecoma からソースをダウンロードし、任意のフォルダへ展開

2.デフォルトではpostgresqlかmysqlを使うようになっているが、手軽にするため、sqlite3を使う様に修正

# コメントアウトしsqlite3を指定
# gem "pg", :group => :postgresql
# gem "activerecord-mysql2-adapter", :group => :mysql

gem 'sqlite3'
 

3.configフォルダ配下にpostgres, mysql, sqlite用のdatabase.ymlが置かれている。
これもsqlite用のファイル名をdataabse.ymlにリネームする。

4.アプリケーションルートで bundle install

$ bundle install

5.データベースを作成

$ rake db:migrate

6.Webサーバーを起動して、localhost:3000へアクセスするとトップページが表示されことを確認。

$ script/server

7.$RAILS_ROOT/test/fixtures/admin_users.ymlを修正し管理者ユーザのを登録

$RAILS_ROOT/test/fixtures/admin_users.yml
$ rake db:fixtures:load FIXTURES=admin_users

# 本番DBへの反映は、「RAILS_ENV=production」オプションを追加

8.http://localhost:3000/admin 管理者ログイン画面で上記で指定したユーザ名・パスワードでログインできることを確認する。

##herokuにアップ

※ heroku、gitのインストール等は終わっている前提で進めます。

Gemfileの修正

1.そのままだとheroku上でruby2.0の環境でデプロイされ、iconvが無い等のエラーがになるので、Gemfileで実行するバージョンを指定

source 'https://rubygems.org'
source 'http://gems.github.com'
ruby "1.9.3" # ←これを追加

2.heroku上ではpostgresqlを使うので、以下のように修正

# gem "pg", :group => :postgresql
# gem "activerecord-mysql2-adapter", :group => :mysql
# gem 'sqlite3'

group :production do
  gem "pg"
end

group :development, :test do
  gem "sqlite3"
end

4.Gemfile.lockを更新するためにbundle install

$ bundle install

その他の修正

1.heroku上でrakeを実行したとき、「taskがありません」といってエラーになるので、以下のファイルをコメントアウト

lib/tasks/rspec.rake
# gem 'test-unit', '1.2.3' if RUBY_VERSION.to_f >= 1.9
# rspec_plugin_dir = File.expand_path(File.dirname(__FILE__) + '/../../vendor/plugins/rspec')
# $LOAD_PATH.unshift("#{rspec_plugin_dir}/lib") if File.exist?(rspec_plugin_dir)
# 
# # Don't load rspec if running "rake gems:*"
# unless ARGV.any? {|a| a =~ /^gems/}
# 
# begin
#   require 'spec/rake/spectask'
# rescue MissingSourceFile
#   module Spec
#     module Rake



# 
#     desc "restart spec_server."
#     task :restart => [:stop, :start]
#     
#     desc "check if spec server is running"
#     task :status do
#       if File.exist?(daemonized_server_pid)
#         $stderr.puts %Q{spec_server is running (PID: #{File.read(daemonized_server_pid).gsub("\n","")})}
#       else
#         $stderr.puts "No server running."
#       end
#     end
#   end
# end
# 
# end

herokuへのアップ

4.git管理の設定

$ git init
$ git add .
$ git commit -m "start project"

5.herokuのプロジェクトを作成

$ heroku create

6.プロジェクトをherokuへデプロイ

$ git push heroku master

7.heroku上でマイグレーションを実行してテーブルを作る。

$ heroku run rake db:migrate

##!!しかしここでエラーになる。
エラーメッセージは以下のようにlogのディレクトリが見つからないとのこと

No such file or directory - /app/log/production.log

以下のコマンドでheroku上に/app/logディレクトリがあるか確認

$ heroku run ls /app
app  bin  ChangeLog  config  COPYRIGHT	db  Gemfile  Gemfile.lock  god	lib  public  Rakefile  README.md  script  spec	stories  test  tmp  var  vendor

確かにない。

.gitignoreでlogをバージョン管理しないようになっているのが理由かと思いその制限を外して再度commit, pushしたが結果は変わらず。。。

heroku run mkdir /app/log

と、heroku上で直接フォルダを作ろうとしても作成されない。

ログの吐き出しを指定している以下のファイルを修正して、logの出力先をtempフォルダに変更

config/environments/production.rb
#config.logger = Logger.new("#{RAILS_ROOT}/log/#{RAILS_ENV}.log", 'daily')

config.logger = Logger.new("#{RAILS_ROOT}/tmp/#{RAILS_ENV}.log", 'daily')

これで以下のコマンドでherokuにデプロイ

$ git add .
$ git commit -m "xxx"
$ git push heroku master

そして再度マイグレーションを実行

$ heroku run rake db:migrate

これでなんとかマイグレーションが通り、テーブルが作成された!

満を持して

$ heroku open

として画面をみたが、、、ブラウザに出た表示は「Application Error」。

heroku logsでログをみると

2014-10-01T09:26:18.510898+00:00 app[web.1]: /app/vendor/bundle/ruby/1.9.1/gems/rails-2.3.18/lib/rails/rack/log_tailer.rb:10:in `size': No such file or directory - /app/log/production.log (Errno::ENOENT)
2014-10-01T09:26:18.510904+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rails-2.3.18/lib/rails/rack/log_tailer.rb:10:in `initialize'
2014-10-01T09:26:18.510907+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.1.6/lib/rack/builder.rb:54:in `new'
2014-10-01T09:26:18.510908+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.1.6/lib/rack/builder.rb:54:in `block in use'
2014-10-01T09:26:18.510913+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.1.6/lib/rack/builder.rb:73:in `each'
2014-10-01T09:26:18.510911+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.1.6/lib/rack/builder.rb:73:in `block in to_app'
2014-10-01T09:26:18.510915+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.1.6/lib/rack/builder.rb:73:in `inject'
2014-10-01T09:26:18.510916+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.1.6/lib/rack/builder.rb:73:in `to_app'
2014-10-01T09:26:18.510920+00:00 app[web.1]: 	from script/server:3:in `require'
2014-10-01T09:26:18.510918+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rails-2.3.18/lib/commands/server.rb:95:in `<top (required)>'
2014-10-01T09:26:18.510910+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.1.6/lib/rack/builder.rb:73:in `call'
2014-10-01T09:26:18.510923+00:00 app[web.1]: 	from script/server:3:in `<main>'
2014-10-01T09:26:18.542751+00:00 app[web.1]: => Rails 2.3.18 application starting on http://0.0.0.0:48853
2014-10-01T09:26:18.542744+00:00 app[web.1]: => Booting WEBrick
2014-10-01T09:26:19.209364+00:00 heroku[web.1]: Process exited with status 1
2014-10-01T09:26:19.220801+00:00 heroku[web.1]: State changed from starting to crashed
2014-10-01T09:26:20.630701+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=step-elecoma.herokuapp.com request_id=825e3cb2-38d6-4ecf-8b31-db82441845bc fwd="126.12.232.102" dyno= connect= service= status=503 bytes=

最終的に不明なエラーで、tempフォルダに出力先を変更したファイルは残っておらず、、、(元々出力されていない?)

怪しいといえば上記のログの1行目の

/bundle/ruby/1.9.1/gems/rails-2.3.18/lib/rails/rack/log_tailer.rb:10:in `size': No such file or directory - /app/log/production.log (Errno::ENOENT)`

しかし/app/logに関してはやはりうまく作れず・・・・

といった状況でお手上げ中です・・・

追記
ここに似たような情報がありましたが、解決にはいたらず・・
https://github.com/ddollar/rails_log_stdout/issues/4

##追記:できました!(2014/10/20)

webサーバーを「thin」を使うようにすることで無事起動ができました!

####thinサーバーのインストール

1.Gemfileにthinを追加

gem 'thin'

2.bundle install

$ bundle install

####Procfileの作成
次にheroku上でthinを使用するためにProcfileを作成します。
Procfileとは本番環境のherokuに使用するwebサーバーなどを伝える設定ファイルのようなものです。
これはアプリケーションルートに配置します。

1.viエディタなどでアプリケーションのルートフォルダに"Procfile"という名前で空のファイルを作成

2.その中にthinをwebサーバとして使用する指示を記述

web: bundle exec thin start -e $RAILS_ENV -p $PORT

####herokuへアップロード

$ git add .
$ git commit -m "comment"
$ git push heroku master
$ heroku open

これでheroku上elecomaのWebページを開くことができました!

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?