我有一个Rails应用程序,我正在Windows上开发并部署到Linux上。我想我将来会完全切换到Linux。不管怎样,在Linux上我需要'execjs‘和'therubyracer’,但在Win7中我不需要它们。所以我把下面这几行放到了我的gemfile中:
gem 'therubyracer', :platforms => :ruby
gem 'execjs', :platforms => :ruby在Linux虚拟机上运行bundle install,应用程序启动正常。但在Windows上我得到:
Uncaught exception: Could not find execjs-1.2.11 in any of the sources
现在,根据我所读到的( platforms下的here),它告诉我“如果一个gem只应该在一个或一组特定的平台上使用,您可以指定它们”,示例如下:
gem "weakling", :platforms => :jruby 上面写着"ruby C Ruby (MRI) or Rubinius, but NOT Windows“。所以在我看来,bundler应该忽略Windows上的execjs行。然而,在Windows上,当我运行bundle install时,我看到了以下内容:
Installing execjs (1.2.11)所以对我来说,这意味着我遗漏了一些关于docs的东西,或者bundler忽略了platform命令。我做错了什么吗?
PS>bundle -v
Bundler version 1.0.21发布于 2012-07-19 22:44:18
:platforms => :ruby确实排除了gem在Windows上的安装。
但是,它在cygwin环境中不起作用。在cygwin中,它认为平台是:mri。
您还会注意到,ruby -e 'puts RUBY_PLATFORM'输出的是i386-cygwin,而不是Windows ruby上的i386-mingw32或i386-mswin。
你是在cygwin环境中工作吗?
发布于 2011-12-11 02:13:13
将如下代码添加到Gemfile,该代码根据操作系统平台排除/包含gem
if RUBY_PLATFORM=~ /win32/
gem "windows-only-gem"
else
gem "os-agnostic-gem"
end发布于 2018-02-24 22:58:07
Rails 5:
if Gem.win_platform?
# Install gem for Windows
else
# Install another gem
endhttps://stackoverflow.com/questions/8421321
复制相似问题