jco*_*lum 15 ruby windows-7 bundler ruby-on-rails-3 ubuntu-11.04
我有一个Rails应用程序,我正在Windows上开发并部署到Linux.我怀疑我将来会完全切换到Linux.无论如何,在Linux上我需要'execjs'和'therubyracer',但我不需要Win7中的那些.所以我将这些行放在我的gemfile中:
gem 'therubyracer', :platforms => :ruby
gem 'execjs', :platforms => :ruby
Run Code Online (Sandbox Code Playgroud)
跑bundle install
在Linux虚拟机和应用程序启动的罚款.但在Windows上我得到:
Uncaught exception: Could not find execjs-1.2.11 in any of the sources
现在,从我读(这里下船)它告诉我,"如果一个宝石只应在特定的平台上使用或设置的平台,您可以指定他们"和样品是这样的:
gem "weakling", :platforms => :jruby
Run Code Online (Sandbox Code Playgroud)
它说" ruby C Ruby (MRI) or Rubinius, but NOT Windows
".所以对我来说,捆绑者应该忽略execjs
Windows上的这一行.但是在Windows上我跑的时候bundle install
看到了这个:
Installing execjs (1.2.11)
Run Code Online (Sandbox Code Playgroud)
所以这对我说我错过了关于docs的东西,或者bundler忽略了platform命令.难道我做错了什么?
PS>bundle -v
Bundler version 1.0.21
Run Code Online (Sandbox Code Playgroud)
Edw*_*son 19
:platforms => :ruby
确实排除了在Windows上安装宝石.
然而,它并没有在工作cygwin的环境.在cygwin中,它认为平台是:mri.
您还会注意到,ruby -e 'puts RUBY_PLATFORM'
输出i386-cygwin
,不i386-mingw32
还是i386-mswin
像它会在Windows上的红宝石.
你在cygwin环境中工作吗?
ffo*_*oeg 10
像这样添加代码到Gemfile,根据OS平台排除/包含gems
if RUBY_PLATFORM=~ /win32/
gem "windows-only-gem"
else
gem "os-agnostic-gem"
end
Run Code Online (Sandbox Code Playgroud)
导轨 5:
if Gem.win_platform?
# Install gem for Windows
else
# Install another gem
end
Run Code Online (Sandbox Code Playgroud)
平台的 Bundler 概念不同于对RUBY_PLATFORM
匹配或 RubyGems 行为的正常理解。
您可以在此处找到有关如何使用 Bundler 平台的完整文档:
http://bundler.io/v1.14/man/gemfile.5.html
您可能不需要therubyracer
在 Windows 上(它实际上不起作用),但您可能需要execjs
使 CoffeeScript 或 Asset Pipeline 的其他细节正常工作
在你的情况下,我会这样做:
gem "execjs"
gem "therubyracer", :platforms => :ruby
Run Code Online (Sandbox Code Playgroud)
更新: execjs gem 可能已安装,因为另一个依赖项(不受平台限制)依赖于它的安装。