Rails:如何正确使用选项进行捆绑安装

时间:2014-01-15 15:36:21

标签: ruby-on-rails ruby rubygems bundler config

我只是尝试使用mysql后端在运行rails 3.2.5(ruby 1.8.7)的服务器上创建一个新的rails应用程序:

rails new myapp -d mysql

到目前为止一切顺利。但是,如果我尝试使用rake db:create创建数据库,我会得到:

Could not find gem 'therubyracer (~> 0.12.0) ruby' in the gems available on this machine.
Run `bundle install` to install missing gems.

如果我按照建议(运行bundle install)进行操作,我会得到一个将要使用的宝石列表(似乎已经安装)并且发生另一个错误:

...
Using ref (1.0.5) 
Using sass (3.2.13) 
Using sass-rails (3.2.6) 
Installing therubyracer (0.12.0) with native extensions 
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

/usr/bin/ruby18 extconf.rb 
checking for main() in -lpthread... yes
checking for v8.h... no
*** extconf.rb failed ***

所以对我来说这表明rake正在寻找错误位置的v8。错误发布还提供了有关如何使用配置选项解决此问题的建议:

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/bin/ruby18
--with-pthreadlib
--without-pthreadlib
--enable-debug
--disable-debug
--with-v8-dir
--without-v8-dir
--with-v8-include
--without-v8-include=${v8-dir}/include
--with-v8-lib
--without-v8-lib=${v8-dir}/lib
/kunden/378731_1150/.gem/ruby/1.8/gems/libv8-3.16.14.3/ext/libv8/location.rb:50:in `configure': You have chosen to use the version of V8 found on your system (Libv8::Location::System::NotFoundError) and *not* the one that is bundle with the libv8 rubygem. However, it could not be located. please make sure you have a version of v8 that is compatible with 3.16.14.3 installed. You may need to special --with-v8-dir options if it is in a non-standard location

看起来我必须像bundle一样配置bundle config --some-option进程,但哪个选项可以解决问题?我已经尝试了所有那些v8相关的选项,但没有一个工作。以--with-v8-xxx开头的选项似乎不允许设置本地安装的v8库的路径(gem list给我Using libv8 (3.16.14.3),我可以在我的本地{{1}看到该文件夹} 目录)。 .gem不可用,因为我不知道系统范围的v8 lib的位置(没有搜索服务器的权限)。

如何解决我的问题?

由于


好的,看起来我已经能够继续了一下。调用像--without-v8-xxx 这样的安装似乎已经说服extconf.rb在我的本地gem而不是系统位置查找v8.h.但是,我还没到那里:

RUBYOPT=-rrubygems gem install libv8

......以后:

ERROR:  Error installing therubyracer:
ERROR: Failed to build gem native extension.

    /usr/bin/ruby18 extconf.rb
checking for main() in -lpthread... yes
*** extconf.rb failed ***

错误发布还为我提供了一些我可以使用的选项,但我完全不了解导致错误。

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:3)

您可以使用bundle config将配置标志传递给您的宝石,例如

bundle config build.libv8 --without-v8-lib=/path/to/lib

通过运行bundle help config

检查捆绑包配置手册页以获取更多信息

UPDATE :根据您收到的错误消息判断,似乎在查找系统的v8 时构建了libv8 gem(不知道为什么这是默认值) )。幸运的是,gem与v8源捆绑在一起,但你需要明确告诉它使用它,就像这样

bundle config build.libv8 --without-system-v8

答案 1 :(得分:0)

您可以使用:

gem install libv8 -v 3.11.8.17 -- --with-system-v8