Rails控制台在服务器上无法工作

25

当我通过SSH在Capistrano部署的Current文件夹中运行bundle exec rails console productionrails console production时,我会得到以下结果:

Usage:
     rails new APP_PATH [options]

Options:
    (...)

有一个解释来启动一个新的应用程序。在本地它有效,为什么我不能远程启动控制台?


这个能用吗?RAILS_ENV=production bundle exec rails console - Eugene
@Eugene 我收到了与上面相同的消息。不知道为什么,Rails 和 Ruby 都已经安装了。 - user2609980
你加载了你的环境吗?rvm gemset 或者 rbenv 或其他。 - Rustam Gasanov
我已经启动了正在运行的(轻量级)服务器。如何加载环境?rvm gemset会报错:Unknown subcommand ' ' - user2609980
6个回答

64

我假设您已经从rails 3升级到版本4,但您的应用程序无法在bin目录中找到可执行文件。运行以下命令以查看Rails版本:

$ rails -v

如果您的rails版本为4或更高,请尝试运行以下代码:

$ rake rails:update:bin

来源:Rails 4发布说明

6.1 重要变化

  • 你的应用现在的可执行文件位于bin/目录中。运行rake rails:update:bin可以获取bin/bundlebin/railsbin/rake

我没有更新 Rails。这是一个干净的安装。我会尝试运行命令。 - user2609980
2
这对我很有帮助。非常感谢。 - Seb Wilgosz
1
"bundle exec rake rails:update:bin" 对我有用,然后是 "bundle exec rails c"。 - RidingTheRails
我尝试了这个解决方案,但是出现了以下错误:“找不到Rakefile(寻找:rakefile、Rakefile、rakefile.rb、Rakefile.rb)”。我对Ruby和Rake都很陌生。有什么想法吗? - Lamar
我不得不稍微修改命令为 bundle exec rake app:update:bin - johnrbnz

21

我正在使用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目录。

15

我也遇到了同样的问题,原来当你通过cap部署时,shared/bin是一个指向current/bin的符号链接。

这是对我有效的解决方法:

  • rm current/bin
  • mkdir current/bin
  • rake rails:update:bin

这应该会有所帮助,但它只是一个临时解决方案,我正在尝试找出如何让cap不自动在current/bin上进行符号链接的方法。


9

如果是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

就这样。


0

这个问题已经有一段时间没有回答了。

在我的情况下,我需要运行:

rake app:update:bin

注意- 使用应用程序而不是Rails。

在我的Rails 5.1应用程序中,我完全缺少bin目录。


是的,使用 bundle exec rake app:update:bin 成功了。 - johnrbnz

0

当我将我的应用程序从Rails 5.2更新到6.0.4时,在我的生产服务器上遇到了这个问题。只需按照以下步骤:

cd to_your_project_dir
rm -r bin
rake app:update:bin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接