抱歉,如果这是一个RTFM类型的问题,但我仍然是rails/ruby/bundler的新手,我有点困惑.
在我们的config/application.rb文件中有这个捆绑器段:
if defined?(Bundler)
# If you precompile assets before deploying to production, use this line
Bundler.require(*Rails.groups(:assets => %w(development test)))
# If you want your assets lazily compiled in production, use this line
# Bundler.require(:default, :assets, Rails.env)
end
Run Code Online (Sandbox Code Playgroud)
在我们中Gemfile我们使用不同的群体,例如
group :development, :test do
gem "rspec-rails", ">= 2.7.0", :group => [:development, :test]
gem 'shoulda-matchers'
gem 'watchr'
gem 'spork', '~> 1.0rc'
gem 'spectator'
gem 'debugger'
gem 'wirble'
end
Run Code Online (Sandbox Code Playgroud)
但是当我运行RAILS_ENV=production bundle install(或bundle install --deployment)时,它仍然会从开发/测试组中安装宝石......
为什么会发生这种情况或如何使其正常工作?
我对bundler和capistrano很新,我试图将它们一起使用.当我尝试部署时,我收到消息:
您正在尝试在更改Gemfile后以部署模式安装.在别处运行`bundle install'并将更新的Gemfile.lock添加到版本控制.
我不知道如何满足抱怨的系统,我不明白为什么抱怨会出现,因为我在文档中读到:
如果Gemfile.lock确实存在,并且您已更新Gemfile(5),则bundler将使用Gemfile.lock中的依赖项来处理您未更新的所有gem,但会重新解析您更新的gem的依赖项.您可以在CONSERVATIVE UPDATING下找到有关此更新过程的更多信息.
我认为这意味着Bundler可以处理我的Gemfile不是它预期的事实.有帮助吗?
规格:Ruby 1.9.3,Rails 3.2.3,Capistrano 2.12.0,Bundler 1.1.4,Windows 7,部署到Posix机器.
编辑:我的Gemfile包含如下逻辑块:
unless RbConfig::CONFIG['host_os'] === 'mingw32'
# gem 'a' ...
end
Run Code Online (Sandbox Code Playgroud) 尝试运行时出现以下错误cap production deploy.
DEBUG [dc362284] Bundler::GemNotFound: Could not find json-1.8.1.gem for installation
DEBUG [dc362284] An error occurred while installing json (1.8.1), and Bundler cannot continue.
DEBUG [dc362284] Make sure that `gem install json -v '1.8.1'` succeeds before bundling.
Run Code Online (Sandbox Code Playgroud)
值得注意的是,此部署正在运行,而不是我升级到Ruby 2.1.0以消除编码错误.我本地升级,工作正常.我跑rvm install 2.1.0,并rvm use 2.1.0随后改变了我的.ruby-version文件,以反映该红宝石升级.
该bundle install命令在本地工作,但当我ssh到目标服务器并运行此命令时,会产生相同的上述错误.
如果我跑,gem list我可以在宝石列表中看到这一点.
...
jquery-rails (3.0.4)
json (1.8.1)
less (2.3.2)
...
Run Code Online (Sandbox Code Playgroud)
如果我在gem install json -v '1.8.1'本地服务器上尝试推荐的解决方案,并在目标服务器上获得以下输出:
Building native extensions. This could …Run Code Online (Sandbox Code Playgroud) 可能有一个git分支依赖,在mygem.gemspec里面?
我在想类似以下内容:
gem.add_runtime_dependency 'oauth2', :git => 'git@github.com:lgs/oauth2.git'
Run Code Online (Sandbox Code Playgroud)
......但它不起作用.
我只使用rake命令学习了Rails rake db:migrate; 但是,我读到我应该使用bundle exec rake ...而不仅仅是普通的rake.现在我对使用哪个感到困惑.
我应该使用bundle exec rake而不仅仅是简单的rake还是仅仅是偏好的东西?任何见解都将非常感谢!谢谢!
我收到这个错误
`establish_connection': Please install the mysql2 adapter: `gem install activerecord-mysql2-adapter` (no such file to load -- active_record/connection_adapters/mysql2_adapter) (RuntimeError)
from /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/activerecord-
Run Code Online (Sandbox Code Playgroud)
这是整个错误和我的配置和gemfile的转储.
当我跑(以root身份)
gem install pg -v '0.12.0' -- --with-pg-config=/usr/pgsql-9.1/bin/pg_config
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
#-> gem instal pg -v '0.12.0' -- --with-pg-config=/usr/pgsql-9.1/bin/pg_config
Building native extensions. This could take a while...
Successfully installed pg-0.12.0
1 gem installed
Installing ri documentation for pg-0.12.0...
Installing RDoc documentation for pg-0.12.0...
#->
Run Code Online (Sandbox Code Playgroud)
当我运行bundle install时:
Installing pg (0.12.0) with native extensions
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/usr/local/rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
--with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no …Run Code Online (Sandbox Code Playgroud) 我在我的gemfile中添加了omniauth gem并尝试运行bundle install,但是收到了有关rails和bundler版本不兼容的消息.我试图更新rails,但收到有关与其他gem不兼容的消息.如何将bundler降级到1.0?
$ bundle install
Fetching gem metadata from http://rubygems.org/......
Fetching gem metadata from http://rubygems.org/..
Bundler could not find compatible versions for gem "bundler":
In Gemfile:
rails (= 3.0.0) ruby depends on
bundler (~> 1.0.0) ruby
Current Bundler version:
bundler (1.1.1)
This Gemfile requires a different version of Bundler.
Perhaps you need to update Bundler by running `gem install bundler`?
Run Code Online (Sandbox Code Playgroud)
和
$ bundle update rails
Fetching gem metadata from http://rubygems.org/......
Fetching gem metadata from http://rubygems.org/..
Bundler could not find …Run Code Online (Sandbox Code Playgroud) 我见过其他人在Mountain Lion上安装RMagick同样的问题但是没有一个建议的解决方案允许我成功安装rmagick.
这是我得到的错误消息:
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
checking for Ruby version >= 1.8.5... yes
checking for /usr/local/bin/gcc-4.2... yes
checking for Magick-config... yes
checking for ImageMagick version >= 6.4.9... yes
checking for HDRI disabled version of ImageMagick... yes
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... yes
checking for InitializeMagick() in -lMagickCore... no
checking for InitializeMagick() in -lMagick... no
checking for InitializeMagick() in -lMagick++... no
Can't install RMagick 2.13.1. Can't find the …Run Code Online (Sandbox Code Playgroud) 我注意到在rubygems.org上有很多宝石建议你用主要版本而不是精确版本来指定它们.例如...
haml-rails宝石 ......
gem "haml-rails", "~> 0.3.4" # "$ bundle install" will acquire the
# latest version before 1.0.
Run Code Online (Sandbox Code Playgroud)
然而,根据Bundler文档,它听起来像我最好确定这样的确切版本...
gem "haml-rails", "0.3.4"
Run Code Online (Sandbox Code Playgroud)
所以你的haml-rails gem和它的所有依赖都不会向前发展.如果您在几周之后在另一台机器上检查项目并运行,$ bundle install那么您将拥有与您指定的所有内容完全相同的版本.
我已经看到点发布破坏了东西,我认为Bundler的整个想法的一部分是" Bundle.lock"你所有的宝石版本.
但是在rubygems.org上他们使用"〜>"很多,所以也许我错过了什么?
任何澄清对我理解Bundler和gem管理都非常有帮助.
bundler ×10
rubygems ×3
capistrano ×2
gem ×2
ruby ×2
dependencies ×1
gem-bundler ×1
gemspecs ×1
imagemagick ×1
mysql ×1
omniauth ×1
pg ×1
postgresql ×1
rake ×1
rmagick ×1
rvm ×1