当我通过SSH在Capistrano部署的Current
文件夹中运行bundle exec rails console production
或rails console production
时,我会得到以下结果:
Usage:
rails new APP_PATH [options]
Options:
(...)
有一个解释来启动一个新的应用程序。在本地它有效,为什么我不能远程启动控制台?
当我通过SSH在Capistrano部署的Current
文件夹中运行bundle exec rails console production
或rails console production
时,我会得到以下结果:
Usage:
rails new APP_PATH [options]
Options:
(...)
有一个解释来启动一个新的应用程序。在本地它有效,为什么我不能远程启动控制台?
我假设您已经从rails 3
升级到版本4,但您的应用程序无法在bin
目录中找到可执行文件。运行以下命令以查看Rails版本:
$ rails -v
如果您的rails
版本为4或更高,请尝试运行以下代码:
$ rake rails:update:bin
来源:Rails 4发布说明
6.1 重要变化
- 你的应用现在的可执行文件位于
bin/
目录中。运行rake rails:update:bin
可以获取bin/bundle
、bin/rails
和bin/rake
。
bundle exec rake app:update:bin
。 - johnrbnz我正在使用Capistrano进行部署,包括了capistrano/bundler gem。由于Rails 4中./bin目录是受版本控制的,因此我们需要通过从set :linked_dirs
中删除bin来防止Capistrano在部署时链接它。
现在为了防止bundler覆盖被版本控制的binstubs,我们可以添加set :bundle_binstubs, nil
这行代码,这将阻止capistrano-bundler在运行bundle install时设置--binstubs选项。
我的config/deploy.rb文件现在包含以下内容:
# Default value for linked_dirs is []
set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system')
set :bundle_binstubs, nil
请注意:linked_dirs
行中缺少bin
目录。我也遇到了同样的问题,原来当你通过cap部署时,shared/bin
是一个指向current/bin
的符号链接。
这是对我有效的解决方法:
rm current/bin
mkdir current/bin
rake rails:update:bin
这应该会有所帮助,但它只是一个临时解决方案,我正在尝试找出如何让cap不自动在current/bin上进行符号链接的方法。
如果是Rails 5.2版本,您需要在项目根目录下运行以下命令来删除bin目录。
rm -rf bin
然后我在项目根目录中运行了另一个命令:
rake app:update:bin
create bin
create bin/bundle
create bin/rails
create bin/rake
create bin/setup
create bin/update
create bin/yarn
就这样。
这个问题已经有一段时间没有回答了。
在我的情况下,我需要运行:
rake app:update:bin
注意- 使用应用程序而不是Rails。
在我的Rails 5.1应用程序中,我完全缺少bin目录。
bundle exec rake app:update:bin
成功了。 - johnrbnz当我将我的应用程序从Rails 5.2更新到6.0.4时,在我的生产服务器上遇到了这个问题。只需按照以下步骤:
cd to_your_project_dir
rm -r bin
rake app:update:bin
RAILS_ENV=production bundle exec rails console
- Eugenervm gemset
会报错:Unknown subcommand ' '
。 - user2609980