我正在向Rails世界迈出第一步。我在一个容器中开发,在那里我有ruby
解释器工作。
官方文档说我需要gem install rails
,然后创建一个新项目。新项目也有bin/rails
,与我的“全局”rails
可执行文件的版本完全相同。这太令人困惑了
我猜rails
只需要搭建一个新项目,对吗?如果是的话,我能以一种不需要“全局”rails gem的方式安装rails吗?像一个 backbone Github仓库?
例如:在PHP中,通常你只需要一个composer.json
文件(= Gemfile
),并为一个给定的框架做一个composer install
(bundle install
),以获得一个 backbone ,你可以在那里工作,包括通常的可执行文件,安装在本地。
2条答案
按热度按时间gt0wga4j1#
运行
rails
时,您运行的是当前安装的最新版本。你可以同时安装多个gem版本,例如,这是我目前为rails安装的gem版本(我的一个ruby版本):运行
rails
可以获得最新版本:如果我有一个几年前的项目,它需要使用
rails v5.2.8.1
。bin/rails
确保您使用正确版本的rails。bin/rails
-相当于bundle exec rails
,它的存在是为了确保使用你的项目的每个人都使用正确的rails版本,包括几年后的你。全局版本一直在变化。如果你有一百万个rails版本,有特殊的语法来指定你想在新项目中使用的版本:
通常你只需要一个composer.json文件(= Gemfile)
作为一个php的局外人,在我开始我的项目之前,我应该知道“composer.json”里面有什么吗?您可以创建一个目录和一个包含一些gem的Gemfile,然后运行
bundle install
-现在该怎么办?Rails项目有着rails new
生成的结构-你不想手动完成所有这些,bundle install
只安装gem(也就是下载它们),它不生成项目结构,如果这有意义的话。对于rails,您可以执行以下操作:
https://bundler.io/v2.4/man/bundle-binstubs.1.html
4zcjmb1e2#
bin/rails
就是binstub。Binstub是围绕可执行文件的 Package 器脚本,其目的是在将调用分派到原始可执行文件之前准备环境。由rails生成的binstub看起来像:
而
config/boot.rb
只是使用Bundler从Gemfile中解析正确的依赖关系:rails/commands
是Rails CLI。这确保了即使您从项目目录外部调用binstub,它仍然以相同的方式工作。
如果是的话,我能以一种不需要“全局”rails gem的方式安装rails吗?
你可以。但是这样做没有什么意义,你有更好的事情要担心。
如果您生成一个Gemfile并使用Bundler安装gem,它们通常会安装在gem路径中(位置取决于Ruby的安装/配置方式)。这与运行
gem install rails
完全相同。Bundler只是使依赖项解析的工作更容易,因为它将尝试找到与gem文件中的其他gem不冲突的版本。虽然您可以配置Replayer将gem安装到项目中的一个文件夹中,但这并不常见。在Ruby中,不使用Bundler(如CLI工具)调用gem是很正常的。
与PHP不同,您可以简单地使用下划线调用包的正确版本(如果需要)。在容器中,这一点甚至更不重要,因为你不会有多个版本。