19

Michael Hartl による ruby​​.railstutorial.org の本を読み始めたばかりで、最初の章まで作業を進めています。Mac book OS X、ターミナル、および Sublime Text を使用しています。Heroku への展開をテストするまでは、すべてが計画どおりに進んでいます。Heroku に接続して$ git push herokumaster コマンドを実行できます。しかし、展開は失敗します:

Installing sqlite3 (1.3.5) with native extensions
       Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
       /usr/local/bin/ruby extconf.rb
       checking for sqlite3.h... no
       sqlite3.h is missing. Try 'port install sqlite3 +universal'
       or 'yum install sqlite-devel' and check your shared library search path (the
       location where your sqlite3 shared library is located).
       *** extconf.rb failed ***
       Could not create Makefile due to some reason, probably lack of
       necessary libraries and/or headers.  Check the mkmf.log file for more
       details.  You may need configuration options.
       Provided configuration options:


An error occurred while installing sqlite3 (1.3.5), and Bundler cannot continue.
       Make sure that `gem install sqlite3 -v '1.3.5'` succeeds before bundling.
 !
 !     Failed to install gems via Bundler.
 !     
 !     Detected sqlite3 gem which is not supported on Heroku.
 !     http://devcenter.heroku.com/articles/how-do-i-use-sqlite3-for-development
 !
 !     Heroku push rejected, failed to compile Ruby/rails app

これが私のGemfileです

source 'https://rubygems.org'

       gem 'rails', '3.2.8'

       # Bundle edge Rails instead:
       # gem 'rails', :git => 'git://github.com/rails/rails.git'

       group :development, :test do
   gem 'sqlite3', '1.3.5'
       end


       # Gems used only for assets and not required
       # in production environments by default.
       group :assets do
       gem 'sass-rails',   '~> 3.2.5'
       gem 'coffee-rails', '~> 3.2.2'

       # See https://github.com/sstephenson/execjs#readme for more supported runtimes
       # gem 'therubyracer', :platforms => :ruby

       gem 'uglifier', '>= 1.2.3'
       end

       gem 'jquery-rails', '2.0.2'

       group :production do
   gem 'pg', '0.12.2'
       end

       # To use ActiveModel has_secure_password
       # gem 'bcrypt-ruby', '~> 3.0.0'

       # To use Jbuilder templates for JSON
       # gem 'jbuilder'

       # Use unicorn as the app server
       # gem 'unicorn'

       # Deploy with Capistrano
       # gem 'capistrano'

       # To use debugger
       # gem 'debugger'

私はsqlite3を本番用ではなく開発用に指定しているので、Herokuはそれをすべて無視するだろうと思っていましたが、そうではないようです.

また、バンドルを作成するときに $ bundle install --without production を使用しています

一部の人々が PG をインストールしてそれを使用することを提案していることは知っていますが、思い切って別のアプローチを試す前に、可能な限りチュートリアルに固執したいと思います。

現時点では少し迷っており、ここから先に進む方法がわかりません。あなたが提供できるどんな助けも大歓迎です。

ありがとう

4

6 に答える 6

25

Heroku は、何らかの理由で sqlite3 gem をインストールできません。しかしbundler、開発中以外はそうすべきではないことがわかります。

Gemfileで、次のものに置き換えますgem 'sqlite3'

group :development, :test do
  gem 'sqlite3'
end
group :production do
  gem 'pg'
end

次に、として実行されているherokuのバンドラーは、productionそれをインストールしようとしません。

于 2012-10-26T08:31:54.753 に答える
14

やっとHerokuにデプロイできました。Heroku サイトの記事を教えてくれた evanc3 に感謝します。Heroku にデプロイする前に Gemgile の更新をコミットするのを忘れていたようです。ですから、始めたばかりの皆さんは、Heroku にデプロイする前に、変更を確実にコミットする必要があります。

于 2012-10-26T17:58:24.820 に答える
11

Heroku は sqlite3 をサポートしていません...

Gemfile から sqlite3 を削除し、代わりに pg gem を使用してください。gemファイルで次の変更を行います

あなたの次の変更Gemfile

gem 'sqlite3'

gem 'pg' #you will have to install postgresql

重要: 実行

git add .
git commit 
git push heroku master

注: heroku にデプロイする予定がある場合は、開発段階でも postgres を使用することをお勧めします (コンピューターに postgresql をインストールします)。heroku は psql を好みます。

開発に sqllite を使用し、Heroku に postgresql を使用する場合は、次の構成を使用します。

group :development do 
   gem 'sqlite3'    #gem to use in development environment
end

group :production do 
  gem 'pg'         #gem to use in production environment
end

Heroku はpg本番環境でアプリケーションを実行するため、Heroku は gemを使用します。

于 2015-06-23T18:06:08.090 に答える
1

Heroku では、アプリはファイル システムにアクセスできません。これにはいくつかの理由があります。基本的には、新しいインスタンスを追加する (つまり、一度に複数のサーバーを実行する) ことでアプリのパフォーマンスをスケーリングでき、これらのインスタンスが同じ物理マシン上にあることが保証されていないためです。全体のファイルは非常に遅くなります。

SQLite はデータベースを db/ フォルダー内のファイルに保存するだけなので、Heroku と互換性がありません。

ヘルプ リンクで提案されているように、最善の選択肢は SQLite から離れることです。なぜなら、SQLite と PostgreSQL (選択した Heroku のデータベース) の間に微妙な非互換性があり、本番環境にデプロイする前にこれを見つけたいからです!

PostgreSQL をインストールしたら (正確な方法は OS によって異なります)、gem 'pg'Gemfile に追加します。

于 2012-10-26T08:49:17.817 に答える