gpt4 book ai didi

ruby-on-rails - Rails 3.1 引擎 : Difference of my_engine. gemspec、add_dependency、add_development_dependency 和 Gemfile

转载 作者:行者123 更新时间:2023-12-03 14:18:58 24 4
gpt4 key购买 nike

只是出于好奇...在我之前的帖子Rails3.1 engine: can't get SLIM or HAML to work in test/dummy app我问在哪里告诉 Ruby 在我的 test/dummy 中使用一些 gem应用。

(显而易见的?)答案是将其放入我的引擎的 Gemfile 中。这行得通,但它让我有点不舒服,因为在 Yehuda Katz 的帖子 Clarifying the Roles of the .gemspec and Gemfile他提到...

...when developing a gem, the Gemfile "a gem’s Gemfile should contain the Rubygems source and a single gemspec line".



另一方面,在我的引擎的 Gemfile(使用 Rails 的 rails plugin new my_engine 生成)中有:
# jquery-rails is used by the dummy application
gem "jquery-rails"

所以这似乎是对的。 更新:不,它没有!看看我下面的答案...

尽管如此, somewhere else on StackOverflow我看到解决方案据说只需要 config/application.rb 中所需的 gem ,而 https://stackoverflow.com/questions/5159607/rails-engine-gems-dependencies-how-to-load-them-into-the-application 它被告知最好放入 lib/<your_engine>/engine.rb file .

这是我的想法: test/dummy 为什么不呢? app 会自动要求 .gemspec 中指定的所有 Gems文件?我们甚至通过显式使用 add_dependency 告诉 gem,哪些 gem 用于生产,哪些用于开发模式。和 add_development_dependency ,所以我看不出有什么原因 test/dummy不这样做。

所以这是最后一个问题:在我的 test/dummy 中,我必须在哪里告诉 Ruby 使用 gem?应用程序?我不想强制 Ruby 在主机应用程序中也使用 gem 。

最佳答案

我认为正确的方法如下:

引擎是一个普通的 gem 。开发 gem 时,将其依赖项放在 gemspec 中。文件。如果您使用 bundle,作为开发人员,您可以创建一个 .lock具有特定版本的文件,您没有问题。但是在 gemspec 中声明了该依赖项还不够用,还得require它们在您的 gem 代码中。当需要它们时,如果 gem 与 bundle 一起使用,.lock使用版本。

在引擎中,与任何其他 gem 一样,它是相同的。您在 gemspec 中定义您的依赖关系。文件,然后运行 ​​bundle install但仅仅使用它们是不够的。例如,您必须在 lib/my_engine.rb 中要求它们。 .

例如:

# File: my_engine.rspec
# ...
s.add_dependency `slim_rails`, ' ~>1.0'

# ...
# File: lib/my_engine.rb
require "my_engine/engine"
require "slim-rails"

module MyEngine
end

如果在 Gemfile 中设置,我不确定为什么使用它们没有更多麻烦。 , 但作为 rails documentation说:

Gem dependencies inside an engine should be specified inside the .gemspec file at the root of the engine. The reason is that the engine may be installed as a gem. If dependencies were to be specified inside the Gemfile, these would not be recognized by a traditional gem install and so they would not be installed, causing the engine to malfunction.

关于ruby-on-rails - Rails 3.1 引擎 : Difference of my_engine. gemspec、add_dependency、add_development_dependency 和 Gemfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12509646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com