Dan*_*son 46 ruby-on-rails bundler
我正在努力将我们的一个Rails 2.3.8应用程序升级到Rails 3,并且遇到了捆绑和部署的恼人问题.我在Windows机器上开发应用程序,但生产环境正在运行Ubuntu Linux.现在,我的问题是Bundler忽略了mysql生产环境中的gem,并且Passenger吐出:"!!!错过了mysql gem.将它添加到你的Gemfile:gem'mysql','2.8.1'"
这是我的Gemfile:
# Edit this Gemfile to bundle your application's dependencies.
# This preamble is the current preamble for Rails 3 apps; edit as needed.
source 'http://rubygems.org'
gem 'rails', '3.0.0'
gem 'net-ldap', :require => 'net/ldap'
gem 'highline', :require => 'highline/import'
gem 'mysql', '2.8.1'
gem 'net-ssh', :require => 'net/ssh'
# Bundle gems for the local environment. Make sure to
# put test-only gems in this group so their generators
# and rake tasks are available in development mode:
group :development, :test do
gem 'fakeweb', :require => 'fakeweb'
gem 'flexmock', :require => 'flexmock/test_unit'
end
Run Code Online (Sandbox Code Playgroud)
如您所见,mysql指定了gem.但是,在部署时,bundler会忽略它.为什么?原因是Bundler生成以下内容Gemfile.lock(仅包含相关部分):
....
mime-types (1.16)
mysql (2.8.1-x86-mingw32)
net-ldap (0.1.1)
....
Run Code Online (Sandbox Code Playgroud)
请注意,它包含特定于平台的gem.这显然不是我想要它做的,因为在Linux下运行时,gem不适合(并且显然被忽略).
那么,Bundler是否有办法解决这些问题?或者我必须记得Gemfile.lock每次在我的开发机器上运行bundle install时手动更改生成的mysql gem版本?
先感谢您!
更新
捆绑团队似乎意识到了这个问题.
wup*_*tah 37
bundle install不--deploy).虽然一般不推荐,但在修复错误之前,这是一种经常使用的解决方法.例如,这是Heroku提供的推荐解决方案.java).我不认真对待这个,但我相信它会解决这个问题.我有一个类似的问题.我希望能够在我的Gemfile中写出这样的东西:
platforms :ruby do # linux
gem 'nokogiri', "1.5.0.beta.2"
end
platforms :mswin do
gem 'nokogiri', "1.4.4.1"
end
Run Code Online (Sandbox Code Playgroud)
但是,捆绑者告诉我,我不被允许.因此,我的解决方法,在这个特定情况下工作是指出一系列版本:
gem 'nokogiri', ">= 1.4.4.1", "<=1.5.0.beta.2"
Run Code Online (Sandbox Code Playgroud)
目前 - 在我的Windows计算机上提供1.4.4.1版本,在我的Linux计算机上提供1.5.0.beta.2.也许你有可能写一个类似的丑陋的解决方法;-)
我们Engine Yard的工程师已经向Bundler提交了一个补丁来解决这个问题,如果在不同的平台上解冻宝石.在运行RailsInstaller演示教程之后,许多Windows尝试部署时遇到了同样的问题.我们发现的最佳解决方案是执行以下操作:
bundle install 像开发机器上的正常情况一样Gemfile.lock,如果有任何行-x86-mingw32,删除该部分.
bcrypt-ruby (3.0.1-x86-mingw32) 变 bcrypt-ruby (3.0.1)ruby在"平台"部分下添加Gemfile.lockGemfile使用platform标志显式指定所需的gem .(不确定是否需要,但不会受到伤害)
Gemfile:'gem'bcrypt-ruby','〜> 3.0',:platform =>'ruby'bundle install再次,这将保持bcrypt-ruby (3.0.1)线,并bcrypt-ruby (3.0.1-x86-mingw32)再次加入.如果您对Bundler补丁感到好奇,可以通过https://github.com/carlhuda/bundler/pull/1451获取通知
希望这有助于任何仍在寻找答案的人.
| 归档时间: |
|
| 查看次数: |
28943 次 |
| 最近记录: |