2012-01-14 15 views
7

Goal: Triển khai một ứng dụng thử nghiệm đơn giản với Sinatra + DataMapper + Postgres + HerokuTriển khai một ứng dụng thử nghiệm đơn giản với Sinatra + DataMapper + Postgres + Heroku trả về: Cài đặt do_sqlite3 (0.10.7) lỗi

Issue : Khi sử dụng gem 'dm-postgres-adapter' gem 'dm-sqlite-adapter' để đẩy ứng dụng vào Heroku tôi nhận được điều này. Cài đặt do_sqlite3 (0.10.7) với phần mở rộng gốc Thật không may, một lỗi nghiêm trọng đã xảy ra. Vui lòng báo cáo lỗi này cho trình theo dõi vấn đề của Bundler theo số https://github.com/carlhuda/bundler/issues để chúng tôi có thể sửa lỗi đó. Cảm ơn!

Tôi đã truy cập liên kết github đó và ai đó có cùng vấn đề nhưng được chuyển đến Heroku, https://github.com/carlhuda/bundler/issues/1488. Tôi đã gửi một email đến danh sách gửi thư của Heroku và đang chờ trả lời.

Tôi chạy vào LoadError: no such file to load -- dm-sqlite-adapter Vì vậy, tôi nói thêm rằng vào Gemfile và Gemfile.lock và điều này là như xa như tôi bao giờ có thể nhận được

tôi đã cố gắng lắp đặt và Postgres thiết lập tại địa phương nhưng thats thương hiệu bộ mới của đau rằng tôi đang học chậm nhưng không thể làm việc được.

Tôi cũng đã đọc từng câu hỏi ở đây với một vấn đề mô phỏng, một số tiến triển đến thời điểm này và một số không có câu trả lời từ người hỏi và để nó là một bí ẩn.

Gemfile

----------------- 
source :rubygems 
gem 'sinatra', '1.1.0' 
gem 'thin', '1.2.7' 
gem 'data_mapper' 
gem 'dm-postgres-adapter' 
gem 'dm-sqlite-adapter' 

Gemfile.lock

------------------------ 
... 
dm-sqlite-adapter (1.2.0) 
    dm-do-adapter (~> 1.2.0) 
    do_sqlite3 (~> 0.10.6) 
... 

Procfile

-------------------- 
web: bundle exec ruby recall.rb -p $PORT 

Recall.rb

--------------------- 
require 'rubygems' 
require 'sinatra' 
require 'data_mapper' 

DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/recall.db") 


class Note 
    include DataMapper::Resource 
    property :id, Serial 
    property :content, Text, :required => true 
    property :complete, Boolean, :required => true, :default => 0 
    property :created_at, DateTime 
    property :updated_at, DateTime 
end 

DataMapper.auto_upgrade! 

get '/' do 
    @notes = Note.all :order => :id.desc 
    @title = 'All Notes' 
    erb :home 
end 

Thuyết minh

------------------------- 
10.7 Lion 
Xcode 4 is installed 
sqlite3 installed by Homebrew 


~ which sqlite3 

/usr/bin/sqlite3 

~ gem list sql 
sqlite3 (1.3.5) 
sqlite3-ruby (1.3.3) 

~ gem list do_sqlite3 
do_sqlite3 (0.10.7) 

~ brew info sqlite3 
sqlite 3.7.9 
http//sqlite.org/ 
Depends on: readline 
/usr/local/Cellar/sqlite/3.7.9 (9 files, 1.9M) 
http//github.com/mxcl/homebrew/commits/master/Library/Formula/sqlite.rb 

Lỗi Log

------------------------------ 
~ rubyfish2 git:(master) git push heroku master 
Counting objects: 22, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (14/14), done. 
Writing objects: 100% (15/15), 2.42 KiB, done. 
Total 15 (delta 8), reused 0 (delta 0) 

-----> Heroku receiving push 
-----> Removing .DS_Store files 
-----> Ruby app detected 
-----> Installing dependencies using Bundler version 1.1.rc.7 

Running: bundle install --without development:test --path vendor/bundle --binstubs bin/ --deployment 

Fetching gem metadata from http//rubygems.org/......... 

Using addressable (2.2.6) 

Using bcrypt-ruby (3.0.1) 

Using daemons (1.1.5) 

Using dm-core (1.2.0) 

Using dm-aggregates (1.2.0) 

Using dm-constraints (1.2.0) 

Using dm-migrations (1.2.0) 

Using fastercsv (1.5.4) 

Using json (1.6.4) 

Using json_pure (1.6.4) 

Using multi_json (1.0.4) 

Using dm-serializer (1.2.1) 

Using dm-timestamps (1.2.0) 

Using dm-transactions (1.2.0) 

Using stringex (1.3.0) 

Using uuidtools (2.1.2) 

Using dm-types (1.2.1) 

Using dm-validations (1.2.0) 

Using data_mapper (1.2.0) 

Using data_objects (0.10.7) 

Using dm-do-adapter (1.2.0) 

Using do_postgres (0.10.7) 

Using dm-postgres-adapter (1.2.0) 

Installing do_sqlite3 (0.10.7) with native extensions Unfortunately, a fatal error has occurred. Please report this error to the Bundler issue tracker at https//github.com/carlhuda/bundler/issues so that we can fix it. Thanks! 

/usr/local/lib/ruby/1.9.1/rubygems/installer.rb:483:in `rescue in block in build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError) 

/usr/local/bin/ruby extconf.rb 

checking for sqlite3.h... no 

*** 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: 

--with-opt-dir 

--without-opt-dir 

--with-opt-include 

--without-opt-include=${opt-dir}/include 

--with-opt-lib 

--without-opt-lib=${opt-dir}/lib 

--with-make-prog 

--without-make-prog 

--srcdir=. 

--curdir 

--ruby=/usr/local/bin/ruby 

--with-sqlite3-dir 

--without-sqlite3-dir 

--with-sqlite3-include 

--without-sqlite3-include=${sqlite3-dir}/include 

--with-sqlite3-lib 

--without-sqlite3-lib=${sqlite3-dir}/lib 

Gem files will remain installed in /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/do_sqlite3-0.10.7 for inspection. 

Results logged to /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/do_sqlite3-0.10.7/ext/do_sqlite3/gem_make.out 

from /usr/local/lib/ruby/1.9.1/rubygems/installer.rb:486:in `block in build_extensions' 

from /usr/local/lib/ruby/1.9.1/rubygems/installer.rb:446:in `each' 

from /usr/local/lib/ruby/1.9.1/rubygems/installer.rb:446:in `build_extensions' 

from /usr/local/lib/ruby/1.9.1/rubygems/installer.rb:198:in `install' 

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/source.rb:90:in `block in install' 

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/rubygems_integration.rb:82:in `preserve_paths' 

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/source.rb:89:in `install' 

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/installer.rb:73:in `block in install_gem_from_spec' 

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/rubygems_integration.rb:97:in `with_build_args' 

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/installer.rb:72:in `install_gem_from_spec' 

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/installer.rb:56:in `block in run' 

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/installer.rb:55:in `run' 

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/installer.rb:12:in `install' 

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/cli.rb:220:in `install' 

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/vendor/thor/task.rb:22:in `run' 

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task' 

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/vendor/thor.rb:263:in `dispatch' 

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/lib/bundler/vendor/thor/base.rb:386:in `start' 

from /tmp/build_1ikvsvr378qb6/vendor/bundle/ruby/1.9.1/gems/bundler-1.1.rc.7/bin/bundle:13:in `<top (required)>' 

from vendor/bundle/ruby/1.9.1/bin/bundle:19:in `load' 

from vendor/bundle/ruby/1.9.1/bin/bundle:19:in `<main>' 
! 
!  Failed to install gems via Bundler. 
! 
!  Heroku push rejected, failed to compile Ruby app 
+0

Bạn đã thử xóa đá quý sqlite chưa? Nó sẽ không cài đặt trên Heroku vì sqlite không được cài đặt trên heroku. Bạn không cần nó để sản xuất (heroku). – mscccc

Trả lời

12

Các lỗi khi cài đặt do_sqlite (Installing do_sqlite3 (0.10.7) with native extensions...) chỉ đơn giản là vì đá quý này đòi hỏi các thư viện sqlite3 để được cài đặt, và họ không vào Heroku. Để khắc phục, hãy xóa dm-sqlite-adapter (đó là những gì idepends trên do_sqlite) từ Gemfile của bạn. Nếu bạn muốn giữ Sqlite cho sự phát triển và sử dụng Postgres phục vụ sản xuất, bạn có thể sử dụng Gembundler's groups:

gem 'dm-postgres-adapter', :group => :production 
gem 'dm-sqlite-adapter', :group => :development 

Bằng cách này, adapter postgresql sẽ được cài đặt trong sản xuất trên Heroku, nhưng sqlite sẽ được sử dụng tại địa phương để phát triển.

Dòng trong mã của bạn mà thiết lập Datamapper là:

DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/recall.db") 

này sẽ tìm kiếm một môi trường biến DATABASE_URL và nếu nó hiện nay sử dụng nó nếu không sử dụng url sqlite. Nhận được lỗi LoadError: no such file to load -- dm-sqlite-adapter cho thấy rằng biến này không thực sự được đặt. Chạy heroku config, sẽ có các mục nhập cho DATABASE_URLSHARED_DATABASE_URL.Nếu chúng không được thiết lập, bạn cần thêm cơ sở dữ liệu.

Hãy xem this other SO question đề cập đến vấn đề tương tự. Giải pháp có để chạy heroku addons:add shared-database:5mb.

Các vấn đề liên quan