Ruby包创建一个自包含的包

时间:2013-06-06 16:43:22

标签: ruby deployment install package bundler

我的目标是:
创建一个ruby应用程序(graylog2-web-client)的自包含tar.gz,我可以在无互联网连接的盒子上安装并运行,只安装了ruby 1.9.3(rvm,bundler,等等将不可用。)

我已正确安装并启动了应用程序,现在我希望将其打包并将其移至目标框。

更新问题:

我使用了bundle install --development来确保所有gem都在供应商/缓存中。 我把包裹弄干了,把它搬到了新的盒子里。 我已经更新了我的路径,以便我的1.9.3 ruby​​安装在默认的1.8.x之前。

ruby --version 
ruby 1.9.3p429 (2013-05-15 revision 40747) [x86_64-linux]

但是当我运行RAILS_ENV=production script/rails server

我得到require / dependency错误:

/usr/local/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- bundler/setup (LoadError)
    from /usr/local/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /opt/graylog2-web-interface-0.11.0/config/boot.rb:6:in `<top (required)>'
    from /usr/local/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /usr/local/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from script/rails:5:in `<main>'

我的供应商目录:

├── bundle
│   └── ruby
│       └── 1.9.1
├── cache
│   ├── actionmailer-3.2.13.gem
│   ├── actionpack-3.2.13.gem
│   ├── activemodel-3.2.13.gem
     ...... lots more gems.......

我将它捆绑在1.9.3下为什么我的捆绑包显示1.9.1?

1 个答案:

答案 0 :(得分:3)

1.9.3下安装的Gems进入1.9.1目录,因为它们具有相同的兼容版本。这是正常的Ruby Gems行为,请参阅Why are we installing Ruby 1.9.2/1.9.3 gems into a 1.9.1 folder?

您的所有宝石都应该安装到bundle/ruby/1.9.1目录中。你看到他们了吗?

要在未安装Bundler的服务器上运行,您需要使用bundle install --standalone生成tarball。

这会在bundle/bundler/setup.rb创建一个文件,您可以从config/boot.rb创建一个文件,而不是bundler/setup

请参阅:http://myronmars.to/n/dev-blog/2012/03/faster-test-boot-times-with-bundler-standalone