Rya*_*yan 6 rubygems ruby-on-rails bundler
我被告知不要忘记Gemfile.lock,但是我遇到了问题.
我在我的windows机器上开发,并推送到linux(ubuntu)服务器,问题是Bundler锁定了某些宝石的windows版本,通过添加:x86-mingw32版本号之后,这会导致问题.
GEM
remote: http://rubygems.org/
specs:
actionmailer (3.2.1)
...
mysql2 (0.3.11-x86-mingw32)
...
PLATFORMS
x86-mingw32
Run Code Online (Sandbox Code Playgroud)
我使用Capistrano进行部署,我收到此错误:
请安装mysql适配器:gem install activerecord-mysql-adapter(mysql不是bundle的一部分.将它添加到Gemfile.)
即使我的gemfile是这样的:
...
gem 'mysql2'
...
Run Code Online (Sandbox Code Playgroud)
我认为那是因为Rails尝试使用Gemfile.lock上的mysql2的windows版本
任何解决这个问题的想法?
在Gemfile中添加如下内容,然后捆绑更新(显然替换当前的mysql2 gem列表)
if RUBY_PLATFORM =~ /win32/
gem "mysql2", :platform => [:mswin, :mingw]
else
gem "mysql2", :platform => :ruby
end
这意味着如果平台是'win32'(Windows)然后安装Windows版本,否则为所有Unix系统安装正常版本'ruby'.至少我不知道任何Unix系统(从Mac OS X,到Linux,到Solaris,到*BSD)都无法使用.
更新:获得更多信息.问题是--deployment标志只查看锁定文件.否则你可以放弃--deployment,将你的gems锁定到Gemfile本身的特定版本,然后运行bundle更新以强制重新评估Gemfile,这会强制选择器.问题是bundle不能满足你的需要,因为它只在使用--deployment标志时评估锁文件.这意味着它无法重新评估其所在的平台.它严格按照锁定文件中的内容进行操作.这就是为什么唯一真正的解决方案是将gem版本锁定在主Gemfile中,然后捆绑更新以强制重新评估.
你可以放弃--deployment,只是使用
bundle update && bundle install --without=development,test,any_other_groups --path=./vendor/bundle
如果你要在一个完全不同于你正在部署的平台上进行开发,这是必要的,因为所引用的是捆绑器的工作方式.上面的命令应该完全复制--deployment所做的事情.所有这些都将记录在.bundle/config中.
| 归档时间: |
|
| 查看次数: |
3226 次 |
| 最近记录: |