ruby-on-rails - Rails: 如何正确使用包安装选项

  显示原文与译文双语对照的内容

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


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 ),我得到一个 Gems的列表,将在另一个错误发生时使用( 似乎已经安装了) aand:


...
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 config --some-option 一样配置 bundle 进程,但是哪个选项会实现这个目的? 我已经尝试了所有这些v8相关的选项,但没有。 从 --with-v8-xxx 开始的选项似乎不允许设置本地安装的v8 lib ( gem list 给我 Using libv8 (3.16.14.3),我可以在本地 .gem 目录中看到这个文件夹) 路径。 因为我不知道系统宽 v8 ( 不具有搜索服务器的权限)的位置,所以 --without-v8-xxx 是不可用的。

如何解决我的问题?

谢谢


看来我已经proceed了。 正在调用安装 RUBYOPT=-rrubygems gem install libv8 在我的本地( 而不是系统位置) 中,说服 extconf.rb 查找 v8.h 似乎是 。 但是,我还没有在那里:


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

"。"。以及以后:


/kunden/378731_1150/.gem/ruby/1.8/gems/libv8-3.16.14.3/ext/libv8/location.rb:15:in `initialize': No such file or directory -/kunden/378731_1150/.gem/ruby/1.8/gems/libv8-3.16.14.3/ext/libv8/.location.yml (Errno::ENOENT)
from/kunden/378731_1150/.gem/ruby/1.8/gems/libv8-3.16.14.3/ext/libv8/location.rb:15:in `open'
from/kunden/378731_1150/.gem/ruby/1.8/gems/libv8-3.16.14.3/ext/libv8/location.rb:15:in `load!'
from/kunden/378731_1150/.gem/ruby/1.8/gems/libv8-3.16.14.3/lib/libv8.rb:6:in `configure_makefile'
from extconf.rb:32

错误帖子还提供了我可以使用的几个选项,但我根本不明白什么原因导致了错误,错误。

有什么想法吗?

谢谢

时间: 作者:

你可以使用 bundle config 将配置标志传递给你的Gems,如下所示


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

通过运行 bundle help config 查看分发包配置手册页

更新: 根据错误消息判断,似乎在寻找系统 ( 不确定为什么这是默认值)的时候正在构建 libv8 gem 。 幸运的是,gem 与xm源绑定,但你需要明确地告诉它使用它,如下所示


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

...