utilise ": plates-formes = & gt;" dans votre travail de gemfile?
J'ai une application Rails, que je suis le développement sur Windows et le déploiement de Linux. Je pense que je vais juste passer entièrement à Linux dans le futur. De toute façon, sur Linux j'ai besoin "execjs" et "therubyracer", mais je n'ai pas besoin de ces dans Win7. Alors, j'ai mis ces lignes dans mon gemfile:
gem 'therubyracer', :platforms => :ruby
gem 'execjs', :platforms => :ruby
Couru un bundle install
sur la machine virtuelle Linux et l'application a démarré fine. Mais sous Windows j'obtiens:
Uncaught exception: Could not find execjs-1.2.11 in any of the sources
Maintenant, ce que j'ai lu (ici sous les plates-formes), il me dit que "Si un bijou doit être utilisé uniquement dans une plate-forme particulière ou un ensemble de plates-formes, vous pouvez spécifier" et l'échantillon est: est-ce
gem "weakling", :platforms => :jruby
Et il dit "ruby C Ruby (MRI) or Rubinius, but NOT Windows
". Donc, pour moi, qui dit que bundler devrait être ignorant la execjs
ligne sur Windows. Cependant sur Windows quand j'ai couru bundle install
j'ai vu ceci:
Installing execjs (1.2.11)
Alors qui me dit que je suis absent quelque chose à propos de la documentation ou de bundler est ignorant les plates-formes de commande. Suis-je en train de faire quelque chose de mal?
PS>bundle -v
Bundler version 1.0.21
source d'informationauteur jcollum
Vous devez vous connecter pour publier un commentaire.
:platforms => :ruby
exclut effectivement les gemmes d'être installé sur Windows.Toutefois, il ne pas travailler dans un cygwin de l'environnement. Dans cygwin, il considère que la plate-forme de l'être :l'irm.
Vous remarquerez également que
ruby -e 'puts RUBY_PLATFORM'
sortiesi386-cygwin
pasi386-mingw32
oui386-mswin
comme il le ferait sur Windows ruby.Avez-vous été à travailler dans un environnement cygwin?
Ajouter du code dans le Gemfile comme ce qui exclut/comprend des gemmes en fonction de la plate-forme OS
Bundler concept de plate-forme diffère de la normale à la compréhension de
RUBY_PLATFORM
de couplage ou de RubyGems comportements.Vous pouvez trouver toute la documentation sur la façon d'utiliser les plates-formes de Bundler ici:
http://bundler.io/v1.14/man/gemfile.5.html
Vous ne pourriez pas besoin
therubyracer
sur Windows (en fait, il ne fonctionne pas), mais vous pourriez avoir besoinexecjs
donc CoffeeScript ou d'autres détails de l'Asset Pipeline fonctionne correctementDans votre cas, je vais faire:
Mise à JOUR: execjs gem peut être installé à cause d'une autre dépendance (pas limité par les plates-formes) est en fonction qu'il soit installé.
Rails 5:
Je ne suis pas sûr de la forme :plate-forme de l'interrupteur que je n'ai jamais utilisé. Cependant, une autre qui je pense va travailler pour votre scénario serait pour envelopper vos déclarations de ces deux pierres précieuses dans un "groupe" de bloc dans votre Gemfile. Comme...
De cette façon, ces pierres ne seront utilisées que dans votre environnement de production, et non pas dans le développement.
Remarque que je crois que bundler va encore installer dans le développement (quelque chose à voir avec la vérification de la dépendance), mais ils ne sont pas chargés et, par conséquent, ne devrait pas causer des problèmes.
Qui fonctionne assez bien pour moi.
Une variation de @ffoeg réponse a fonctionné pour moi, et gère tous les environnements windows, alors que juste à l'aide de
RUBY_PLATFORM=~ /win32/
n'a pas fonctionné:Je suis d'accord que ce n'est pas idéal d'avoir différents gemfiles, cependant depuis que je suis en utilisant
unicorn
de servir mon Jekyll blog sur Heroku, j'ai donc besoin d'gem unicorn
- et cela repose surkgio
qui plusieurs sources ont confirmé est pratiquement impossible de l'installer sur windows...