Ruby 在使用bundle安装--部署时如何包括bundler本身
我正在尝试将我的ruby应用程序进行供应商化,这样我就不必在服务器上手动安装任何gems,并且可以在我们的puppet设置中将我的应用程序部署为rpm 这几乎是可行的,除了我在GEM文件中添加了一个require'bundler'之外,没有任何绑定器进入供应商目录的痕迹。因此,我的应用程序失败了Ruby 在使用bundle安装--部署时如何包括bundler本身,ruby,bundler,Ruby,Bundler,我正在尝试将我的ruby应用程序进行供应商化,这样我就不必在服务器上手动安装任何gems,并且可以在我们的puppet设置中将我的应用程序部署为rpm 这几乎是可行的,除了我在GEM文件中添加了一个require'bundler'之外,没有任何绑定器进入供应商目录的痕迹。因此,我的应用程序失败了 no such file to load -- bundler 正好在加载依赖项的位置 require 'bundler' Bundler.setup 有没有什么明显的东西我在这里错过了,或者捆绑
no such file to load -- bundler
正好在加载依赖项的位置
require 'bundler'
Bundler.setup
有没有什么明显的东西我在这里错过了,或者捆绑机不能真正的自我推销
值得一提的是,我使用的是jruby 1.7.8,该应用程序包含以下文件:
# run with --local to use locally cached gems
# bundle install --full-index --without testing development
# vendorized setup for production
# bundle install --full-index --without testing development --deployment
source 'https://rubygems.org'
gem 'bundler'
gem 'sinatra'
gem 'sinatra-flash'
gem 'sinatra-contrib'
gem 'rack-parser', :require => 'rack/parser'
gem 'dynamic_attributes', :github => 'joona/dynamic_attributes', :require => false
gem 'httparty'
gem 'haml'
gem 'json'
gem 'airbrake'
# gem 'rake'
#gem 'omniauth-google' # TO-DO: deprecate
gem 'bcrypt-ruby', :require => 'bcrypt'
gem 'oauth'
gem 'oauth2'
gem 'omniauth'
gem 'omniauth-dropbox'
gem 'omniauth-facebook'
gem 'omniauth-google-oauth2'
gem 'omniauth-linkedin'
gem 'omniauth-twitter'
gem 'omniauth-windowslive', :git => 'git://github.com/joona/omniauth-windowslive.git'
gem 'lumber'
gem "log4r-gelf"
gem "resque", :github => "resque/resque", :branch => '1-x-stable'
gem "resque-pool"
gem 'tux', :require => false
gem 'actionmailer'
gem 'actionpack', '4.0.1'
gem 'activesupport', '4.0.1', :require => false
gem 'activerecord', '4.0.1'
platforms :jruby do
gem 'activerecord-jdbc-adapter' #, :github => 'jruby/activerecord-jdbc-adapter'
gem 'jdbc-mysql'
gem 'activerecord-jdbcmysql-adapter'
end
platforms :ruby do
gem 'mysql2'
end
group :testing do
gem 'shoulda-matchers', :require => false
gem 'webmock', '1.8.0', :require => false
gem 'database_cleaner', '1.0.1'
gem "sequel", "~> 4.3.0", :require => false
gem 'rspec'
gem 'capybara'
#gem 'vcr'
gem 'simplecov', :require => false
gem 'launchy'
gem 'rack-test', :require => false
gem 'faker'
gem 'fabrication'
gem 'sinatra-sessionography', :require => false
platforms :ruby do
gem 'sqlite3'
end
platforms :jruby do
gem 'jdbc-sqlite3'
end
end
#
group :development do
gem 'guard', "1.8.3", :require => false
gem 'guard-sass', '1.3.2', :require => false
gem 'guard-less', '0.1.2', :require => false
gem 'guard-process', '1.0.6', :require => false
gem 'guard-rspec', '3.1.0', :require => false
gem 'juicer'
gem 'foreman', :require => false
# shotgun with logging quickfix!
#gem 'shotgun', :github => 'joona/shotgun'
gem 'guard-shotgun', :git => 'https://github.com/rchampourlier/guard-shotgun.git'
gem 'capistrano', '~> 2'
gem 'rvm-capistrano'
end
group :production do
platforms :ruby do
gem 'passenger'
end
platforms :jruby do
gem 'fishwife'
end
end
这不起作用的原因是因为
Bundler.setup
是实际设置加载路径以查找供应商宝石的代码。如果Bundler是卖方,它将无法找到它来进行设置
您可以执行以下两种操作之一:
require'bundler'
和bundler.setup
行,而是添加require\u relative'bundle/bundler/setup'
(如果您从项目根目录以外的文件调用它,则会调整路径)您是否尝试过使用
gem“bundler”
(在依赖项加载时,除了Gemfile
)之外?是的,它在需要“bundler”时失败,并且找不到文件。Bundler确实在供应商目录中找不到。它很脏,但由于您有供应商
文件夹,您可以尝试要求/vendor/bundle/{RUBY_ENGINE}/{RUBY_VERSION}/gems/Bundler-{Bundler_VERSION}/lib/bundler.rb
问题在于它实际上并不存在,尽管我最终决定不使用gemIn——独立,因为它基本上生成代码并创建备用代码路径。基本上,我现在正在打包bundler和gem以及我的定制ruby构建。这就完成了任务,并允许我的供应商化rpm调用Bundler.setup,这似乎是在生产设置中使用供应商化github依赖项的唯一方法(这就是我需要Bundler可用的原因)。如果我正确设置构建路径,我应该能够做一个require bundle,然后能够运行Bundler.setup,即使gem位于供应商目录中,对吗?我认为使用bundle安装--standalone
这样做没有任何好处。