【问题标题】:Rubymine Thin with SSL options带有 SSL 选项的 Rubymine Thin
【发布时间】:2013-06-20 14:18:15
【问题描述】:

我可以用 THIN 和

bundle exec thin start --ssl --ssl-verify --ssl-key-file /private/etc/apache2/ssl/server.key --ssl-cert-file /private/etc/apache2/ssl/server.crt

它在控制台/终端中完美运行

但是当我尝试在“运行/调试配置”->“编辑脚本参数”下的 ruby​​mine 中附加这些选项时,我得到:

/Users/jan/.rbenv/versions/1.9.3-p392/bin/ruby -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)  /Users/jan/RubymineProjects/myapp/script/rails server thin -b 0.0.0.0 -p 3000 -e development --ssl-verify --ssl-key-file /private/etc/apache2/ssl/server.key --ssl-cert-file /private/etc/apache2/ssl/server.crt
/Users/jan/.gem/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands/server.rb:33:in `parse!': invalid option: --ssl-verify (OptionParser::InvalidOption)
from /Users/jan/.gem/ruby/1.9.1/gems/rack-1.4.5/lib/rack/server.rb:283:in `parse_options'
from /Users/jan/.gem/ruby/1.9.1/gems/rack-1.4.5/lib/rack/server.rb:180:in `options'
from /Users/jan/.gem/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands/server.rb:54:in `set_environment'
from /Users/jan/.gem/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands/server.rb:42:in `initialize'
from /Users/jan/.gem/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands.rb:50:in `new'
from /Users/jan/.gem/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands.rb:50:in `<top (required)>'
from /Users/jan/RubymineProjects/myapp/script/rails:6:in `require'
from /Users/jan/RubymineProjects/myapp/script/rails:6:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'

进程以退出代码 1 结束 任何人都可以帮助我们/我吗?

非常感谢!

【问题讨论】:

  • 不能在thin的配置文件(YAML)中指定ssl密钥和证书文件吗?

标签: ruby ruby-on-rails-3 openssl thin rubymine


【解决方案1】:

使用以下方式

require 'rack'

SERVER_KEY = File.expand_path('../../ssl-cert/host.key',  __FILE__)
SERVER_PEM = File.expand_path('../../ssl-cert/host.crt',  __FILE__)

# Thin SSL workaround
module Rack
  module Handler
    class Thin
      def self.run(app, options={})
        app = Rack::Chunked.new(Rack::ContentLength.new(app))
        server = ::Thin::Server.new(options[:Host] || '0.0.0.0',
                                    options[:Port] || 3000,
                                    app)
        server.ssl = true
        server.ssl_options = {
            :private_key_file => SERVER_KEY,
            :cert_chain_file => SERVER_PEM
        }
        yield server if block_given?
        server.start
      end
    end
  end
end
# Workaround end

APP_PATH = File.expand_path('../../config/application',  __FILE__)
require File.expand_path('../../config/boot',  __FILE__)
require 'rails/commands'

【讨论】:

  • 来自this Github comment,如果您希望Thin使用其内置的自签名证书,您可以将nil传递给:private_key_file:cert_chain_file
【解决方案2】:

我在这里得到了帮助:

http://devnet.jetbrains.com/message/5490676

似乎 Rubymine 无法解析此类参数,但解决方法是使用 Run/Debug Configurations 中的 Ruby 脚本执行此操作

【讨论】:

    【解决方案3】:

    不应使用选项--ssl-verify

    【讨论】:

      【解决方案4】:

      显然,这实际上可以通过添加 Procfile 和 gem foreman 来实现,就像在这组指令中一样:

      Using Rails, Thin and SSL in RubyMine: The solution!

      基本上,您将工头添加到您的 Gemfile:

      gem 'foreman'
      

      然后在您的根目录中创建一个Procfile链接拼错了),其中包含以下内容:

      web: thin start --ssl
      

      或者,像 RubyMine 通常那样绑定到 0.0.0.0:

      web: thin start -a 0.0.0.0 -p 3001 --ssl
      

      我不需要指定我的 ssl 文件的位置,但如果您愿意,可以:

      web: thin start -a 0.0.0.0 -p 3001 --ssl --ssl-key-file /private/etc/apache2/ssl/server.key --ssl-cert-file /private/etc/apache2/ssl/server.crt
      

      我不建议使用--ssl-verify,因为这对我不起作用。

      最后,在 RubyMine 中,使用以下属性创建一个新的 Ruby 配置:

      • Ruby 脚本:这应该是工头可执行文件的路径,例如:~/.rvm/gems/ruby-2.3.0@gemset/gems/foreman-0.82.0/bin/foreman
      • 脚本参数start
      • 工作目录:项目的根目录,例如~/Sites/appname

      在 Bundler 选项卡中,选中唯一的复选框以在运行时使用 bundle exec

      最后,在日志选项卡中,添加一个指向~/Sites/appname/logs/development.log的新日志文件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-06
        相关资源
        最近更新 更多